我尝试使用以下代码来使用子流程从屏幕捕获输出,但它没有按照我的意图去做。
#!/tools/bin/python
import subprocess
result = subprocess.check_output("echo $USERNAME", shell=True)
print result
预期输出为:
vimo
vimo
即。一个用于回显过程,另一个用于打印结果输出。 但我所看到的是
vimo
但是当我尝试打印结果输出时,它总是为空。
我在上面的谜题中缺少什么!!帮忙!!
答案 0 :(得分:0)
在这里你会被一些极大的剥离(并且出于隐私原因而改变)原始虚拟代码片段,从外部脚本输出中获取stdin和stdout。
from subprocess import Popen, PIPE
cmd = ['echo', 'foo']
proc = Popen(cmd, stdout=PIPE, stderr=PIPE)
comm = proc.communicate()
if proc.returncode != 0:
# code to handle / parse stderr (comm[1])
raise RuntimeError(
'\'%s\': command has failed (%d):\n%s'
% ('some value', proc.returncode, comm[1]))
for line in comm[0].split('\n'):
if line.find('Wrote:') == 0:
# some code to parse stdout
pass
答案 1 :(得分:0)
Python >= 3.7(使用 Python 3.9 测试)
r=subprocess.run(['echo','$XDG_DATA_HOME'],capture_output=True,shell=True)
assert r.stdout.find(b'share')>0 # ERROR
r=subprocess.run('echo $XDG_DATA_HOME',capture_output=True,shell=True)
assert r.stdout.find(b'share')>0 # OK