提问人:user56834 提问时间:11/16/2023 更新时间:11/16/2023 访问量:70
如何中断正在运行bash命令的python脚本?
How to interrupt python script that is running a bash command?
问:
我正在运行一个 python 脚本,该脚本通过cmd
try:
subprocess.run(['/bin/bash', '-ic', cmd])
except as e:
print("Error:", e)
我从 bash 终端运行这个 python 脚本。当我在执行某些 bash 命令时按下时,似乎只有 bash 命令被打断,但 python 脚本继续运行(没有捕获和打印异常。如何让 cntrl-C
或其他一些终端命令中断或导致 python 本身出现异常?cntrl-C
e
答:
2赞
Kais
11/16/2023
#1
Python 脚本不会接收到信号,因为它将 shell 作为子进程运行。
若要在 Python 脚本中处理 Ctrl-C 并捕获 KeyboardInterrupt 异常,可以使用 signal 模块:
import subprocess
import signal
def signal_handler(sig, frame):
raise KeyboardInterrupt("Ctrl-C pressed")
# Register the signal handler
signal.signal(signal.SIGINT, signal_handler)
cmd = "add_command_here"
try:
subprocess.run(['/bin/bash', '-ic', cmd])
except Exception as e:
print("Error:", e)
评论
0赞
user56834
11/17/2023
是否将信号的触发注册到所有子进程?我很困惑,因为如果 python 脚本根本没有接收到信号,那么如何接收 SIGINT?signal.signal(signal.SIGINT, signal_handler)
signal_handler
signal
评论
subprocess.run
subprocess
/bin/bash