python 脚本调用 shell 脚本,即使 python 脚本结束我也想保持其进程处于活动状态
python script calling a shell script and i want to keep its process active even if the python script ends
我希望我的 python 脚本调用一个二进制文件,它将无限期地保持打印。调用 python 脚本后,我希望二进制文件继续运行。
寿命是这样的:
p--------->|
|
b------------>
"p" 是正在执行的 python 脚本,不久之后从 python 脚本调用二进制文件,甚至在 python 脚本被终止后二进制文件继续运行.
我尝试使用 subprocess.popen,但在 python 脚本结束后,二进制文件的进程也被终止。
我也试过 os.popen 但它是同步的所以它会一直等到二进制文件 returns.
你有什么建议吗?
谢谢
您可以使用 subprocess.Popen
。
像这样:
main.py
import subprocess
print("Starting")
subprocess.Popen(["sh", "child.sh"])
print("Ending")
child.sh
while :
do
echo "Something"
sleep 1
done
脚本将在进程完成后继续打印。
查看这些链接以获得更多见解:
在您的情况下,假设您在同一目录中有 2 个文件 run.py
和 script.sh
。
script.sh
#!/bin/sh
while :
do
echo "script running"
sleep 1
done
run.py
import subprocess
import sys
print("Starting script")
subprocess.run("bash ./script.sh", shell=True)
print("Finished. Script running in background")
为了运行后台的脚本,在末尾添加一个符号。 运行 python run.py &
在您的终端中,returns 一个 process id
您可以终止进程 例如 [1] 123520
。该进程将在后台启动,但即使您按 ctrl + c
,它仍会在终端中记录输出。要解决这个问题,只需使用 add nohup
,这将忽略输出。所以 运行 nohup python run.py &
.
我希望我的 python 脚本调用一个二进制文件,它将无限期地保持打印。调用 python 脚本后,我希望二进制文件继续运行。
寿命是这样的:
p--------->|
|
b------------>
"p" 是正在执行的 python 脚本,不久之后从 python 脚本调用二进制文件,甚至在 python 脚本被终止后二进制文件继续运行.
我尝试使用 subprocess.popen,但在 python 脚本结束后,二进制文件的进程也被终止。
我也试过 os.popen 但它是同步的所以它会一直等到二进制文件 returns.
你有什么建议吗?
谢谢
您可以使用 subprocess.Popen
。
像这样:
main.py
import subprocess
print("Starting")
subprocess.Popen(["sh", "child.sh"])
print("Ending")
child.sh
while :
do
echo "Something"
sleep 1
done
脚本将在进程完成后继续打印。
查看这些链接以获得更多见解:
在您的情况下,假设您在同一目录中有 2 个文件 run.py
和 script.sh
。
script.sh
#!/bin/sh
while :
do
echo "script running"
sleep 1
done
run.py
import subprocess
import sys
print("Starting script")
subprocess.run("bash ./script.sh", shell=True)
print("Finished. Script running in background")
为了运行后台的脚本,在末尾添加一个符号。 运行 python run.py &
在您的终端中,returns 一个 process id
您可以终止进程 例如 [1] 123520
。该进程将在后台启动,但即使您按 ctrl + c
,它仍会在终端中记录输出。要解决这个问题,只需使用 add nohup
,这将忽略输出。所以 运行 nohup python run.py &
.