gpt4 book ai didi

python - 从 Python 运行外部命令。然后在屏幕上显示输出并同时获取输出

转载 作者:行者123 更新时间:2023-12-01 02:37:24 25 4
gpt4 key购买 nike

我知道从 Python 运行外部命令并将输出显示在屏幕上很容易。例如:(它将仅在屏幕上显示输出)

import subprocess
subprocess.Popen(['dir'])

我还知道我们可以从 Python 运行外部命令并获取输出。例如:(它将将输出存储作为变量out中的字符串,并且将不再在屏幕上显示输出)

import subprocess
result = subprocess.Popen(['dir'], stdout=subprocess.PIPE)
out = result.stdout.read()

我的问题是:有没有办法在屏幕上显示输出并同时在变量中存储和输出?换句话说,当我运行代码时,外部命令输出将显示在屏幕上。同时,代码中的一个变量可以获得屏幕上显示的输出。

更新:我发现如果我在 subprocess.Popen 中包含 stdout=subprocess.PIPE,它不会在屏幕上显示任何内容(Windows 命令提示符)。

相关问题:

live output from subprocess command

Output of subprocess both to PIPE and directly to stdout

最佳答案

如果您需要 Popen 的实时输出,您可以使用类似的东西(Windows 平台根据您的 last comment ):

字节流:

import sys, subprocess
out=b''
result = subprocess.Popen(['cmd', '/c', 'dir /B 1*.txt'], stdout=subprocess.PIPE,
universal_newlines=False)
for s_line in result.stdout:
#Parse it the way you want
out += s_line
print( s_line.decode(sys.stdout.encoding).replace('\r\n',''))

# debugging output
print(out.decode(sys.stdout.encoding))

文本流:

import subprocess
out=''
result = subprocess.Popen(['cmd', '/c', 'dir /B 1*.txt'], stdout=subprocess.PIPE,
universal_newlines=True)
for s_line in result.stdout:
#Parse it the way you want
out += s_line
print( s_line.rstrip())

# debugging output
print(out)

后一个代码片段输出:

>>> import subprocess
>>> out=''
>>> result = subprocess.Popen(['cmd', '/c', 'dir /B 1*.txt'], stdout=subprocess.PIPE,
... universal_newlines=True)
>>> for s_line in result.stdout:
... #Parse it the way you want
... out += s_line
... print( s_line.rstrip())
...
1.325.txt
1049363a.txt
1049363b.txt
1051416.txt
1207235log.txt
>>> print(out)
1.325.txt
1049363a.txt
1049363b.txt
1051416.txt
1207235log.txt

>>>

关于python - 从 Python 运行外部命令。然后在屏幕上显示输出并同时获取输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46081729/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com