【问题标题】:python script calling a shell script and i want to keep its process active even if the python script endspython脚本调用shell脚本,即使python脚本结束,我也想保持其进程处于活动状态
【发布时间】:2021-10-19 02:05:52
【问题描述】:

我希望我的 python 脚本调用一个可以无限期打印的二进制文件。调用 python 脚本后,我希望二进制文件继续运行。

寿命是这样的:

p--------->|
      |
      b------------>

“p”是被执行的 python 脚本,不久之后,二进制文件被 python 脚本调用,即使在 python 脚本被杀死后,二进制文件也会继续运行。

我尝试使用 subprocess.popen,但在 python 脚本结束后,二进制文件的进程也被终止。

我也尝试过使用 os.popen,但它是同步的,所以它会一直等到二进制文件返回。

你有什么建议吗?

谢谢

【问题讨论】:

  • 这行得通.. "subprocess.Popen([name, input] )" : )

标签: python process subprocess


【解决方案1】:

你可以使用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】:

    查看这些链接以获得更多信息:

    在您的情况下,假设您在同一目录中有 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 &,它返回一个process id,你可以杀死进程例如 [1] 123520。该过程将在后台启动,但是即使您按ctrl + c,它仍会在终端中记录输出。要解决这个问题,只需使用添加nohup,它将忽略输出。所以运行nohup python run.py &。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-01-15
      • 1970-01-01
      • 2018-03-25
      • 2013-01-05
      • 2015-11-18
      • 2020-10-02
      • 1970-01-01
      相关资源
      最近更新 更多