在 Python - Raspbian Linux 中处理一个 PIPE
Processing a PIPE inside Python - Raspbian Linux
伙计们....我通过 subprocess Popen
在 Python 程序中有一个脚本 运行
命令使用脚本的输出创建管道。这是工作。但是我认为我必须使用 .communicate()
命令来处理程序中管道中的记录。我无法让它工作,但确实让它与这段代码一起工作。我在尝试使用 .communicate
命令时做错了什么?
import subprocess
nul_f = open('/dev/null', 'w')
try:
tcpdmp = subprocess.Popen(['/usr/bin/sudo /usr/sbin/tcpdump -A -n -p -l - i eth0 -s0 -w - tcp dst port 80'],
stdout=subprocess.PIPE, shell=True,
stderr=nul_f,)
print 'My Records'
i=0
# end_of_pipe = tcpdmp.communicate()
while i<10:
i=i+1
line = tcpdmp.stdout.readline()
print '\t --', i, line
except KeyboardInterrupt:
print 'done'
tcpdmp.terminate()
tcpdmp.kill()
nul_f.close()
感谢任何建议和批评.....RDK
ps...运行 Raspbian Linux Raspberry pi...
.communicate()
等待 子进程结束。 tcpdump
不会和平结束,这就是为什么您的代码具有 except KeyboardInterrupt
(处理 Ctrl+C)的原因。
无关:你可以用这个替换 while 循环:
from itertools import islice
for line in enumerate(islice(iter(tcpdump.stdout.readline, b''), 10), start=1):
print '\t --', i, line, #NOTE: comma at the end to avoid double newlines
另见,Stop reading process output in Python without hang?
伙计们....我通过 subprocess Popen
在 Python 程序中有一个脚本 运行
命令使用脚本的输出创建管道。这是工作。但是我认为我必须使用 .communicate()
命令来处理程序中管道中的记录。我无法让它工作,但确实让它与这段代码一起工作。我在尝试使用 .communicate
命令时做错了什么?
import subprocess
nul_f = open('/dev/null', 'w')
try:
tcpdmp = subprocess.Popen(['/usr/bin/sudo /usr/sbin/tcpdump -A -n -p -l - i eth0 -s0 -w - tcp dst port 80'],
stdout=subprocess.PIPE, shell=True,
stderr=nul_f,)
print 'My Records'
i=0
# end_of_pipe = tcpdmp.communicate()
while i<10:
i=i+1
line = tcpdmp.stdout.readline()
print '\t --', i, line
except KeyboardInterrupt:
print 'done'
tcpdmp.terminate()
tcpdmp.kill()
nul_f.close()
感谢任何建议和批评.....RDK
ps...运行 Raspbian Linux Raspberry pi...
.communicate()
等待 子进程结束。 tcpdump
不会和平结束,这就是为什么您的代码具有 except KeyboardInterrupt
(处理 Ctrl+C)的原因。
无关:你可以用这个替换 while 循环:
from itertools import islice
for line in enumerate(islice(iter(tcpdump.stdout.readline, b''), 10), start=1):
print '\t --', i, line, #NOTE: comma at the end to avoid double newlines
另见,Stop reading process output in Python without hang?