【发布时间】:2022-01-22 00:41:09
【问题描述】:
我已经尝试了几个小时将 shell 命令的输出作为字符串。我尝试了subprocess 和os,但都没有成功,在subprocess 内我尝试过check_output()、getoutput()、Popen()、communicate(),以及我能做的所有其他事情在这个网站和许多其他网站上找到。
有时我会遇到诸如FileNotFoundError: [WinError 2] The system cannot find the file specified 之类的错误,尽管我能够相对迅速地修复这些错误,但是当代码确实有效时,我尝试打印命令的输出,要么它什么都不返回(如in,它打印空白),或者它打印(b'', b'') 或(b'', None)。
decode() 不起作用,encoding 没有改变任何东西,我什至尝试过:
subpr = str(process)
当然,它什么也没做。
你如何得到一个shell命令的输出,作为一个字符串?
其他尝试:
subpr = (Popen(commandRun,shell=True,stdout=PIPE,stderr=PIPE,universal_newlines=True).communicate()[0])
process = subprocess.getoutput(commandRun)
process = subprocess.check_output(commandRun,shell=True)
process = subprocess.check_output(commandRun,stdout=PIPE,shell=True)
process = Popen(commandRun,stdout=PIPE,shell=True)
subpr = process.communicate()[0]
output = Popen(commandRun,shell=True,stdout=PIPE,stderr=PIPE)
subpr = output.communicate()
进口:
import subprocess
from subprocess import Popen, PIPE
没有太多要添加的代码。除了那条虚线之外,我没有写任何关于子流程的东西。
【问题讨论】:
-
您能添加更多代码吗?您对
subprocess的调用可能有问题。 -
这条线
subpr = (subprocess.Popen(commandRun,shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE,universal_newlines=True).communicate()[0])也有效。你确定你正在运行的进程没有问题吗? -
你用的是哪个python版本?
-
我不知道,有可能。
commandRun变量是两个命令的组合,我可能错误地将它们串在一起。第一部分是将文件路径设置为我磁盘上的原始路径,然后第二部分是实际命令。没有文件路径,该命令不起作用。 -
您使用的是 Windows 吗?