gpt4 book ai didi

Python 在 Windows 上发送 SIGINT 信号子进程

转载 作者:行者123 更新时间:2023-12-05 07:32:58 25 4
gpt4 key购买 nike

我已经阅读了很多关于 stackoverflow 的问题,但它们太老了,对我没有帮助。我有一个子进程,想发送 CTRL_C_EVENT 信号来停止它。我不想直接杀死它。这是我的代码:

import subprocess
import os
import signal

CREATE_NO_WINDOW = 0x08000000
'''
I tried these too but i failed.
creationflags=CREATE_NO_WINDOW | CREATE_NEW_PROCESS_GROUP | DETACHED_PROCESS
CREATE_NEW_PROCESS_GROUP = 0x00000200
DETACHED_PROCESS = 0x00000008
'''

cmd = 'my cmd arguments'
process = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT,universal_newlines=True,shell=True,creationflags=CREATE_NO_WINDOW)
test = 0
for line in process.stdout:
test += 1
if (test > 60):
os.kill(process.pid, signal.CTRL_C_EVENT)
#This fails too
#process.send_signal(signal.CTRL_C_EVENT)
else:
print(line)

这里异常(exception):

OSError: [WinError 6] The handler is invalid

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
File "C:\Users\xxxxxxx\Desktop\xxxxx\test subprocess.py", line 16, in <module>
os.kill(process.pid, signal.CTRL_C_EVENT)
SystemError: <built-in function kill> returned a result with an error set

最佳答案

我预计这是因为您的进程由于 for line in process.stdout:

而仍在使用中

您可能需要先退出for循环然后发送CTRL_C_EVENT信号来停止它

尝试这样的事情:

import subprocess
import os
import signal

CREATE_NO_WINDOW = 0x08000000
'''
I tried these too but i failed.
creationflags=CREATE_NO_WINDOW | CREATE_NEW_PROCESS_GROUP | DETACHED_PROCESS
CREATE_NEW_PROCESS_GROUP = 0x00000200
DETACHED_PROCESS = 0x00000008
'''

cmd = 'my cmd arguments'
process = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT,universal_newlines=True,shell=True,creationflags=CREATE_NO_WINDOW)
test = 0

CTRL_C_EVENT_is_required=False

for line in process.stdout:
test += 1
if (test > 60):
CTRL_C_EVENT_is_required=True
break
else:
print(line)

if CTRL_C_EVENT_is_required==True:
os.kill(process.pid, signal.CTRL_C_EVENT)

关于Python 在 Windows 上发送 SIGINT 信号子进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50877878/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com