如何在Python3中将命令的输出写入stdout和文件?

时间:2018-03-30 07:19:56

标签: python

我有一个Windows命令,我想写入stdout和一个文件。现在,我的文件中只写了0个字符串:

#!/usr/bin/env python3
#! -*- coding:utf-8 -*-

import subprocess

with open('auto_change_ip.txt', 'w') as f:
    print(subprocess.call(['netsh', 'interface', 'show', 'interface']), file=f)

1 个答案:

答案 0 :(得分:2)

subprocess.call返回一个int(返回码),这就是您在文件中写入0的原因。 如果要捕获输出,为什么不使用subprocess.run

import subprocess

cmd = ['netsh', 'interface', 'show', 'interface']
p = subprocess.run(cmd, stdout=subprocess.PIPE)
with open('my_file.txt', 'wb') as f:
    f.write(p.stdout)

要在p.stdout中捕获输出,您必须将标准输出重定向到subprocess.PIPE
现在p.stdout保存输出(以字节为单位),您可以将其保存到文件中。

Python版本的另一个选项< 3.5是subprocess.Popen。这种情况的主要区别是.stdout是一个文件对象,所以你必须阅读它。

import subprocess

cmd = ['netsh', 'interface', 'show', 'interface']
p = subprocess.Popen(cmd, stdout=subprocess.PIPE)
out = p.stdout.read()
#print(out.decode())  
with open('my_file.txt', 'wb') as f:
    f.write(out)