Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Python中读取正在进行的进程的标准输出?_Python_Process_Stdout_Tcpdump - Fatal编程技术网

如何在Python中读取正在进行的进程的标准输出?

如何在Python中读取正在进行的进程的标准输出?,python,process,stdout,tcpdump,Python,Process,Stdout,Tcpdump,您好,我是Python编程语言的新手,在编写一个脚本时遇到了一个问题。我希望保存在Python脚本中的变量中运行tcpdump命令时从stdout获得的输出,但我希望tpcdump命令连续运行,因为我希望收集所有传输的数据包的长度,这些数据包经过tcpdump过滤(使用我编写的过滤器)。 我试过: fin, fout = os.popen4(comand) result = fout.read() return result 但是它只是挂起。我猜它挂起是因为os.pop

您好,我是Python编程语言的新手,在编写一个脚本时遇到了一个问题。我希望保存在Python脚本中的变量中运行tcpdump命令时从stdout获得的输出,但我希望tpcdump命令连续运行,因为我希望收集所有传输的数据包的长度,这些数据包经过tcpdump过滤(使用我编写的过滤器)。 我试过:

    fin, fout = os.popen4(comand)
    result = fout.read()
    return result

但是它只是挂起。

我猜它挂起是因为
os.popen4
在子进程退出之前不会返回。您应该改用
subprocess.Popen

import subprocess
import shlex  #just so you don't need break "comand" into a list yourself ;)

p=subprocess.Popen(shlex.split(comand),stdout=subprocess.PIPE)
first_line_of_output=p.stdout.readline()
second_line_of_output=p.stdout.readline()
...

非常感谢。成功了。起初,我试着从命令行,它似乎没有工作,但当我写了一个脚本,它做到了。还要感谢您的及时:)