我正在使用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)
此处未打印“运行命令”。
答案 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标志。