我已经尝试了几个小时将shell命令的输出作为字符串。我尝试过subprocess
和os
,它们都不起作用,在subprocess
中,我尝试过了check_output()
、getoutput()
、Popen()
、communicate()
,以及我在这个网站和许多其他网站上找到的所有其他内容。
有时我会遇到FileNotFoundError: [WinError 2] The system cannot find the file specified
之类的错误,尽管我能够相对快速地修复这些错误,但当代码确实有效,并且我试图打印命令的输出时,它要么不返回任何内容(如中所示,它打印空白(,要么打印(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
没有更多的代码可添加。除了那条虚线之外,我还没有写任何关于子流程的内容。
您是如何使用这些的?
我有以下代码可以工作,将STDERR重定向到STDOUT,因为我想将它们合并:
import subprocess
args = ["whoami"]
run = subprocess.run(args, text=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
print(run.stdout)
如果您想将进程管道连接在一起,最好的方法可能是将popes放在Popen
的参数中,请参阅https://docs.python.org/3/library/subprocess.html#replacing-bin sh shell命令替换
p1 = Popen(["dmesg"], stdout=PIPE)
p2 = Popen(["grep", "hda"], stdin=p1.stdout, stdout=PIPE)
p1.stdout.close() # Allow p1 to receive a SIGPIPE if p2 exits.
output = p2.communicate()[0]