我想我有几个问题涉及多个问题。所以首先,代码:
import subprocess
username = input ("Enter username: ")
subprocess.call(["python3", "sherlock", username])
Popen.terminate()
我正在使用subprocess
使用python3运行sherlock
程序。问题是,无论出于何种原因,sherlock
程序完成后都不会退出。我不确定这是sherlock
的问题,还是我方面的问题。老实说,我不在乎,只想在给它运行50秒后杀死它就可以了,因为这就是运行的时间。
我做了一些阅读,据我所知,我应该使用Popen.terminate()
杀死它吗?我知道该命令需要更多运行,我需要告诉它要杀死什么...这就是我遇到的问题。我不确定如何确定正在运行的进程,然后杀死它。我的程序中有95%是在sherlock运行之后发生的,所以距离还很远,所以我需要杀死它,让程序继续前进。
不确定如何从这里继续...
Popen。通信(输入=无,超时=无)
与进程交互:将数据发送到stdin。从stdout和stderr读取数据,直到到达文件末尾。等待进程终止。
我认为此功能完全可以满足您的需求。您应该将50秒传递给timeout
参数。下面是示例代码段,同样来自文档:
proc = subprocess.Popen(...)
try:
outs, errs = proc.communicate(timeout=50)
except TimeoutExpired:
proc.kill()
outs, errs = proc.communicate()
尝试这样的事情:
import subprocess
username = input ("Enter username: ")
try:
ret = subprocess.call(["python3", "sherlock", username], timeout=50)
except subprocess.TimeoutExpired:
# TODO: manage exception
pass
某些进程挂起,等待来自stdin
的数据。在这种情况下,请关闭该管道并自行等待终止。一些进程会捕获信号,可能需要稍加微调才能使其退出。
import subprocess
username = input ("Enter username: ")
process = subprocess.Popen(["python3", "sherlock", username],
stdin=subprocess.PIPE)
process.stdin.close()
try:
process.wait(50)
except subprocess.TimeoutExpired:
# timeout expired, be nice
process.terminate()
try:
process.wait(2)
except subprocess.TimeoutExpired:
# be mean
process.kill()
try:
process.wait(2)
except TimeoutExpired:
# zombies, run!
print("sherlock could not be killed!")
import subprocess
username = input ("Enter username: ")
a_child_process = subprocess.Popen(args=["python3", "sherlock", username], stdout=subprocess.PIPE)
subprocess.Popen.terminate(a_child_process)