我想做subprocess.call,并将调用的输出转换为字符串。我可以直接执行此操作,还是需要将其传送到文件,然后从中读取?我可以让subprocess.call将调用的输出写入字符串吗?
换句话说,我可以以某种方式将stdout和stderr重定向到一个字符串中吗?
我想做subprocess.call,并将调用的输出转换为字符串。我可以直接执行此操作,还是需要将其传送到文件,然后从中读取?我可以让subprocess.call将调用的输出写入字符串吗?
换句话说,我可以以某种方式将stdout和stderr重定向到一个字符串中吗?
不,你不能直接读取subprocess.call()的输出到字符串中。
为了读取命令的输出成一个字符串,你需要使用subprocess.Popen(),例如:
>>> cmd = subprocess.Popen('ls', stdout=subprocess.PIPE)
>>> cmd_out, cmd_err = cmd.communicate()
cmd_out将与命令的输出字符串。
subprocess.call()
采用与subprocess.Popen()
相同的参数,其中包括stdout
和stderr
参数。有关详细信息,请参阅文档。
在网上查看文档不是很清楚,你能否提供一个例子,就像使用Popen的其他答案一样。或者以stdout = subprocess.PIPE为例,说明如何获得标准输出值的明确示例。答案与Popen答案相同吗? – David 2014-12-30 08:23:30
它实际上是一样的,因为两个函数都有相同的参数。 – 2014-12-30 16:52:43
subprocess
模块提供了一个方法check_output()
,它运行带有参数(如果有的话)的提供的命令,并将其输出作为字节字符串返回。
output = subprocess.check_output(["echo", "hello world"])
print output
上面的代码将打印hello world
见文档:https://docs.python.org/2/library/subprocess.html#subprocess.check_output
这是mantazer的回答python3的延伸。您仍然可以在python3使用subprocess.check_output
命令:
>>> subprocess.check_output(["echo", "hello world"])
b'hello world\n'
但是现在它给了我们一个字节的字符串。为了得到我们需要用解码一个真正的Python字符串:
>>> subprocess.check_output(["echo", "hello world"]).decode(sys.stdout.encoding)
'hello world\n'
使用sys.stdout.encoding
作为编码,而不仅仅是默认UTF-8
应该在任何操作系统上(至少在理论上)这一工作。
其后的换行符(和任何其他多余的空白)可使用.strip()
容易地去除,所以最终命令是:
>>> subprocess.check_output(["echo", "hello world"]
).decode(sys.stdout.encoding).strip()
'hello world'
也许相同http://stackoverflow.com/questions/2502833/python -ore-output-of-subprocess-call-in-a-string – aeter 2011-05-05 18:54:16