我有一个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)
答案 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)