You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python3中同时将命令输出写入stdout和文件?附Windows命令问题

解决Windows命令输出同时写入stdout和文件的问题

你遇到的问题根源很明确:subprocess.call()返回的是命令的退出状态码,0就表示命令执行成功,所以你把这个状态码print到文件里,自然只会写入"0",而不是netsh命令的实际输出内容。

下面给你两种实用的解决方案,根据你的需求选择即可:

方案1:一次性捕获并输出(适合短输出场景)

用Python3.5+推荐的subprocess.run()来捕获命令的标准输出,然后同时打印到控制台和写入文件:

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

# 执行命令并捕获输出,text=True让输出是字符串而非字节
result = subprocess.run(
    ['netsh', 'interface', 'show', 'interface'],
    capture_output=True,
    text=True,
    # 如果需要把错误输出也一起捕获,加上下面这行
    # stderr=subprocess.STDOUT
)

# 输出到标准输出(控制台)
print(result.stdout)

# 写入文件
with open('auto_change_ip.txt', 'w', encoding='utf-8') as f:
    f.write(result.stdout)

方案2:实时输出(适合长输出/需要实时查看内容的场景)

如果netsh命令的输出较多,或者你想一边执行一边看到输出,用subprocess.Popen()来实时读取输出流,同时完成打印和写入操作:

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

with open('auto_change_ip.txt', 'w', encoding='utf-8') as f:
    # 启动子进程,把stdout导向管道
    proc = subprocess.Popen(
        ['netsh', 'interface', 'show', 'interface'],
        stdout=subprocess.PIPE,
        text=True,
        # 同样,如果要包含错误输出,添加此行:stderr=subprocess.STDOUT
    )
    # 逐行读取输出
    for line in proc.stdout:
        print(line, end='')  # 打印到控制台,end=''避免重复换行
        f.write(line)        # 写入文件
    # 等待命令执行完成,获取退出码
    exit_code = proc.wait()
    # 可根据需求处理退出码,比如非0时提示错误
    if exit_code != 0:
        print(f"命令执行失败,退出码:{exit_code}")

两种方案都能解决你的问题,选哪种看你具体的场景需求就好~

内容的提问来源于stack exchange,提问作者Hrvoje T

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:08:29