如何停止/终止python脚本的运行? (再来一次)

时间:2019-12-17 17:27:59

标签: python python-3.x

上下文

我有一个正在运行的python脚本。它在一个循环中包含许多os.system("./executableNane")调用。

如果我按ctrl + C,它将停止执行当前./executableNane并传递到下一个。

问题

如何停止整个脚本的执行,而不仅仅是当前调用的可执行文件的执行?

请注意,我已经仔细阅读了问题/答案here,但是即使使用kill,我也可以杀死可执行文件 executableNane ,但是不能整个脚本(使用top无法找到)。

我必须停止脚本(不重新引导系统)的唯一方法是继续循环按ctrl + C,直到所有测试完成。

2 个答案:

答案 0 :(得分:1)

您可以使用subprocesssignal handlers来执行此操作。您还可以使用subprocess通过subprocess.PIPE接收和发送信息,您可以在文档中了解更多信息。

以下应该是您要做什么的基本示例:

import subprocess
import signal
import sys

def signal_handler(sig, frame):
    print("You pressed Ctrl+C, stopping.")
    print("Signal: {}".format(sig))
    print("Frame: {}".format(frame))

    sys.exit(123)

# Set up signal handler
signal.signal(signal.SIGINT, signal_handler)

print("Starting.")
while True:
    cmd = ['sleep', '10']
    p = subprocess.Popen(cmd)
    p.wait()
    if p.returncode != 0:
        print("Command failed.")
    else:
        print("Command worked.")

答案 1 :(得分:0)

与我发现的解决方案相比,该问题的另一种解决方案(@Quillan Kaseman提供)更加优雅。当我按Ctrl + Z而不是Ctrl + C时,所有问题都解决了。

实际上,我不知道为什么Z可以工作,而C不能工作。 (稍后我将尝试查找一些详细信息)。