繁体   English   中英

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

[英]How to stop/terminate a python script from running? (once again)

上下文

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

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

问题

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

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

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

您可以使用子进程信号处理程序来执行此操作。 您还可以使用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.")

与我找到的解决方案相比,该问题的另一个解决方案(由@Quillan Kaseman 提供)要优雅得多。 当我按Ctrl + Z而不是Ctrl + C时,我所有的问题都解决了。

事实上,我不知道为什么Z可以工作而C不行。 (我稍后会尝试寻找一些细节)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM