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
我正在编写脚本以使用 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