子进程命令输出



我已经尝试了几个小时将shell命令的输出作为字符串。我尝试过subprocessos,它们都不起作用,在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]

最新更新