Popen混乱 - 重定向输出,方法不起作用



问题是该过程没有启动。该对象是创建的,但是没有并且没有过程。

如果我在OS.kill语句之前放了一个time.sleep(),我将失去控制权。该过程确实开始了,但没有被杀死。此外,我的病情丢失了。我键入的任何内容都不会出现(我想它也将变为null)。我必须关闭终端,打开一个新的终端,然后手动杀死该过程(启动Python并发出确切的命令完成这项工作,这很高兴知道)

airodump = subprocess.Popen('airodump-ng -w outputfile mon0',shell=True,stdout=open('/dev/null', 'w'), stderr=open('/dev/null', 'w'))
#time.sleep(5)
os.kill(airodump.pid, signal.SIGTERM)   # airodump-ng
#airodump.wait()
print airodump

我尝试调用popen.terminate(),popen.kill()的方法。我错过了Popen的东西。

即使我在"打印airodump"之前放入popen.wait()时,它才会绕过并打印对象地址。那个小怪癖是使我对正在发生的事情的理解不正确的。

您应该尝试:

airodump = subprocess.Popen(['airodump-ng', '-w', 'outputfilename', 'mon0'],
                            stdout=subprocess.PIPE, stderr=subprocess.PIPE)
time.sleep(secs)
airodump.terminate()
return_code = airodump.wait()

请注意,我用列表替换了您的字符串命令,将Shell = True和Stdout的内容删除。第一个shell = true使所有内容都更难调试,因此您应该在没有它的情况下尝试运行此操作,但是要做到这一点,您需要使用命令而不是字符串的列表。

捕获Stdout/stderr并防止它们进入屏幕的更为标准的方法是使用stdout=subprocess.PIPE。如果您仍然无法按照期望尝试检查AiroDump.stdout和airodump.sterr。希望这足以让您开始。

最新更新