【问题标题】:Stopping bash running in a python script停止在 python 脚本中运行的 bash
【发布时间】:2021-04-22 15:38:22
【问题描述】:

我正在编写一个调用 bash 脚本的 python 脚本。

from subprocess import call
rc = call("./try_me.sh")

如何在不退出正在运行的 python 脚本的情况下退出正在运行的 bash 文件? 我需要 Ctrl + C 之类的东西。

【问题讨论】:

  • 改用subprocess.Popen(),并向子进程发送SIGINT 信号。

标签: python python-3.x bash subprocess


【解决方案1】:

有不同的方法来解决这个问题。

您似乎正在编写某种 CLI 工具,因为您引用了 Ctrl+C。如果是这种情况,您可以使用 & 并在需要时发送 SIGINT 信号来停止它。

import os
os.system('nohup ./try_me.sh &')

如果您想要更严格的控制,请尝试使用异步子进程管理:

https://docs.python.org/3/library/asyncio-subprocess.html

【讨论】:

    【解决方案2】:

    经过一番研究,我发现我应该按照@AKX 的建议使用 Popen 来运行 bash 文件。

    from subprocess import Popen
    r1 = Popen('printf "*Systempassword* \n" |sudo -S  ./try_me.sh &', shell=True, preexec_fn=os.setsid))
    

    当你需要停止运行 bash 文件时

    import os
    os.killpg(os.getpgid(r1.pid), signal.SIGTERM) # Send the signal to all the process groups
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-19
      • 2018-02-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多