在subprocess.popen之后执行下一行代码

时间:2019-01-25 11:33:32

标签: python subprocess python-3.4 tcpdump

我正在使用Popen执行Tcpdump命令。在我的代码中,popen行会运行,但不会执行popen行之后的下一行代码。为什么会发生这种情况,我该如何解决?谢谢。

from subprocess import Popen, PIPE
import os
import time

pw ='12345678'
process = Popen(['sudo', '-S', 'tcpdump', '-i', 'wlp1s0', 'udp', 'port 8308', '-w', 'trace.pcap'], stdout=PIPE,universal_newlines=True,stdin=PIPE)
process.communicate(pw + '\n')[1]
print("Command ran")
time.sleep(3)

此处未打印“运行命令”。

1 个答案:

答案 0 :(得分:0)

process.communicate等待进程终止。

如果您想不等待终止就将输入发送到进程,请使用process.stdin

process.stdin.write(password + "\n")

tcpdump不会以您的参数终止,除非您发送SIGINT信号。

  

如果不使用-c标志运行,Tcpdump将继续捕获数据包,直到被SIGINT信号(例如,通过键入您的中断字符,通常是control-C生成)或SIGTERM信号(通常是生成的)中断为止使用kill(1)命令);如果使用-c标志运行,它将捕获数据包,直到被SIGINT或SIGTERM信号中断或指定数量的数据包已被处理为止。

您可以在参数中包含-c标志。

相关问题