使用NamedTemporaryFile通过Linux上的子进程从stdout读取

时间:2015-06-23 08:37:20

标签: python-2.7 subprocess temporary-files

import subprocess
import tempfile

fd = tempfile.NamedTemporaryFile()
print(fd)
print(fd.name)
p = subprocess.Popen("date", stdout=fd).communicate()
print(p[0])
fd.close()

返回:

<open file '<fdopen>', mode 'w' at 0x7fc27eb1e810>
/tmp/tmp8kX9C1
None

相反,我希望它返回类似的内容:

Tue Jun 23 10:23:15 CEST 2015

我尝试添加mode="w"以及delete=False,但无法成功实现。

1 个答案:

答案 0 :(得分:0)

除非stdout=PIPE; <{1}}代码中始终为p[0]

要将命令输出为字符串,可以使用None

check_output()

check_output() uses stdout=PIPE and .communicate() internally

要读取文件的输出,您应该在文件对象上调用#!/usr/bin/env python from subprocess import check_output result = check_output("date")

.read()