Live output status from subprocess command Error:I/o operation on closed file Python

Live output status from subprocess command Error:I/o operation on closed file Python

我正在编写脚本以使用 subprocess.Popen 获取 netstat 状态。

cmd = 'netstat -nlpt | grep "java" | grep -v tcp6'

result1 = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True, universal_newlines=True )
stdout, stderr=result1.communicate()

for line in iter(result1.stdout):
    print(line)

上面给出了 ValueError: I/O 对已关闭文件的操作。。有什么办法可以得到直播输出。在 live output from subprocess command 他们使用 writen 和 readlines 在这里我只需要打印实时状态请有人帮助我解决这个问题。谢谢!

您收到此错误是因为 stdout 文件描述符在您要对其进行迭代时已经关闭。我写了一个工作版本。此实现可以实时提供被调用命令的输出。

代码:

import sys
import subprocess

cmd = 'netstat -nlpt | grep "java" | grep -v tcp6'

result1 = subprocess.Popen(
    cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True, universal_newlines=True
)

while True:
    out = result1.stdout.read(1)
    if out == "" and result1.poll() is not None:
        break
    if out != "":
        sys.stdout.write(out)
        sys.stdout.flush()

输出:

>>> python3 test.py
tcp        0      0 127.0.0.1:6943          0.0.0.0:*               LISTEN      239519/java         
tcp        0      0 127.0.0.1:63343         0.0.0.0:*               LISTEN      239519/java