我正在python2和python3环境中运行以下脚本。
import subprocess as sub
import sys
#import time
import multiprocessing, time, signal
def tcpdump():
p = sub.Popen(('sudo', 'tcpdump', '-l', '-xx'), stdout=sub.PIPE)
for row in iter(p.stdout.readline, b''):
sys.stdout.write(row.rstrip())
def print_hello():
print "yo"
time.sleep(20)
print "goodbye"
def main():
p1 = multiprocessing.Process(target=tcpdump)
p2 = multiprocessing.Process(target=print_hello)
p1.start()
p2.start()
while p2.is_alive():
time.sleep(2)
p1.terminate()
print "We terminated"
#p1.terminate()
#print "one more time"
#print_hello()
#tcpdump()
main()
在python3中,它运行正常,但是在python2中,这给了我一个错误
tcpdump: Unable to write output: Broken pipe
有人知道背后的原因吗?
P.S。在python3中运行之前,我更改了打印语句。
答案 0 :(得分:0)
您需要先退出进程,然后再离开程序并从子进程中删除sudo。这段代码可以在我的机器上运行:
import subprocess as sub
import sys
#import time
import multiprocessing, time, signal
def tcpdump(p):
for row in iter(p.stdout.readline, b''):
sys.stdout.write(row.rstrip())
def print_hello():
print "yo"
time.sleep(5)
print "goodbye"
def main():
p = sub.Popen(('tcpdump', '-l', '-xx'), stdout=sub.PIPE)
p1 = multiprocessing.Process(target=tcpdump, args=(p,))
p2 = multiprocessing.Process(target=print_hello)
p1.start()
p2.start()
while p2.is_alive():
time.sleep(2)
p1.terminate()
p.kill()
print "We terminated"
#p1.terminate()
#print "one more time"
#print_hello()
#tcpdump()
main()
使用sudo运行此脚本,一切都会正常。