簡體   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