我正在编写一个脚本,以使用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操作。。有什么方法可以获取实时流输出。在子流程命令的实时输出中,他们在这里使用写入和读取行,我只需要打印实时状态,请有人帮助我解决此问题。谢谢!
由于要在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
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句