是否可以在 python 中中断 Popen 子进程?
Posted
技术标签:
【中文标题】是否可以在 python 中中断 Popen 子进程?【英文标题】:Is it possible to interrupt Popen subprocess in python? 【发布时间】:2021-02-16 01:52:28 【问题描述】:from subprocess import Popen, PIPE
command = "ping google.com -t"
with Popen(["cmd", "/c", command], stdout=PIPE, bufsize=1,
universal_newlines=True) as p:
for line in p.stdout:
print(line.strip())
我正在使用 Popen 运行命令行参数并捕获输出。我想根据用户的输入发送击键以停止此操作,但我不确定如何中断子进程。在上面的例子中,“Ctrl C”是必需的,但在我的代码中我只需要发送字母“q”。
可以这样做吗?
【问题讨论】:
p.terminte()
和 p.kill()
有效,但是您的示例令人困惑,因为您没有使用击键作为程序的输入。
我正在运行的可执行文件而不是“ping google”除了作为初始参数外不接受任何输入。 p.kill() 和 p.terminate() 停止可执行文件,但是如果我在运行它时在 cmd 中发送“q”,则可执行文件会安全地自行停止(因为它已连接到设备)。我正在尝试将其包装在不依赖命令行参数的 GUI 中。
【参考方案1】:
import keyboard # using module keyboard
from subprocess import Popen, PIPE
command = "ping google.com -t"
while True: # making a loop
try:
with Popen(["cmd", "/c", command], stdout=PIPE, bufsize=1,
universal_newlines=True) as p:
for line in p.stdout:
print(line.strip())
# used try so that if user pressed other than the given key error will not be shown
if keyboard.is_pressed('q'): # if key 'q' is pressed
print('EXIT !')
p.kill()
break # finishing the loop
except:
break
【讨论】:
以上是关于是否可以在 python 中中断 Popen 子进程?的主要内容,如果未能解决你的问题,请参考以下文章
是否可以将subprocess.Popen的stdout重新连接到sys.stdout? (python3)