输出os.popen()的结果

时间:2015-10-07 20:22:58

标签: python subprocess

我正在尝试将os.popen()的结果发送到输出文件。这是我一直在尝试的代码

import subprocess

fob = Popen('dir',stdout='popen_output.txt',shell=true).stdout

输出文件只是空白。但是,命令的结果显示在屏幕上。我也试过像这样使用Popen(根据子进程管理文档):

import subprocess

subprocess.Popen('dir',stdout='popen_output.txt,shell=true)

以及:

ssl_certificate_key

4 个答案:

答案 0 :(得分:2)

确定。这样就搞定了。谢谢你的帮助!

fob = open('popen_output.txt','a')
subprocess.Popen('dir',stdout=fob,shell=True)
fob.close()

答案 1 :(得分:1)

将文件对象传递给stdout而不是文件名作为字符串,您也可以使用check_call代替Popen,它将为非零退出状态引发CalledProcessError

with open('popen_output.txt',"w") as f:
      subprocess.check_call('dir',stdout=f)

如果您使用的是subprocess.check_call('dir',stdout=f, shell=True),则还可以使用{= 1}}使用shell = True重定向:

>

答案 2 :(得分:1)

这似乎更像是你想做的事情。您可以处理然后写入文件。

process = subprocess.Popen(cmd, stdout=subprocess.PIPE, shell=True)
for line in process.stdout:
    #processing then write line to file...
    file.write(line)

如果您不想处理,那么您可以在subprocess电话中执行此操作。

subprocess.run('dir > popen_output.txt', shell=true)

答案 3 :(得分:0)

问题是你调用fp.read()两次而不是将单个fp.read()调用的结果保存为res,打印res,并将res写入输出文件。文件句柄是有状态的,所以如果你两次调用read,第一次调用后的当前位置将在文件/流的末尾,因此是空白文件。

试试这个(仅提供相关更改):

fp = os.popen(cmd)
res = fp.read()
print(res)