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.pyscript.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 &.