上下文:
我有一个正在运行的python脚本。它在一个循环中包含许多os.system("./executableNane")
调用。
如果我按ctrl + C
,它将停止执行当前./executableNane
并传递到下一个。
问题:
如何停止整个脚本的执行,而不仅仅是当前调用的可执行文件的执行?
请注意,我已经仔细阅读了问题/答案here,但是即使使用kill
,我也可以杀死可执行文件 executableNane ,但是不能整个脚本(使用top
无法找到)。
我必须停止脚本(不重新引导系统)的唯一方法是继续循环按ctrl + C,直到所有测试完成。
答案 0 :(得分:1)
您可以使用subprocess和signal 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
不能工作。 (稍后我将尝试查找一些详细信息)。