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

Python 3.6 Windows子进程标准输出重定向至文件失效问题

Windows下Python 3.6 subprocess调用bat文件重定向失效的解决办法

问题分析

你的代码在Linux/MacOS环境正常运行,但Windows下生成的目标文件为空,核心原因大概率是以下两点:

  1. 工作目录不匹配:subprocess默认继承父进程的工作目录,若some_file或some_dir是相对路径,可能因找不到文件导致findstr无输出。
  2. 命令解释器调用方式问题:直接运行bat文件时,部分环境下系统未正确触发cmd.exe解析重定向符号>,导致输出未写入目标文件。

解决方案

方案1:直接调用cmd执行命令(推荐,无需生成临时bat文件)

去掉生成bat文件的步骤,直接通过cmd.exe /c执行命令,同时指定工作目录确保路径正确:

import os
import subprocess

if os.name == "nt":
    # 直接用cmd执行命令,显式指定脚本所在目录为工作目录
    cmd = 'findstr something some_file > some_dir/some_file'
    script_dir = os.path.dirname(os.path.abspath(__file__))
    p = subprocess.Popen(
        ["cmd.exe", "/c", cmd],
        stderr=subprocess.PIPE,
        cwd=script_dir
    )
else:
    script = 'grep -E something some_file > some_dir/some_file'
    script_name = 'wat.sh'
    with open(script_name, 'w') as f:
         f.write(script + '\n')
    p = subprocess.Popen(["/bin/sh", script_name], stderr=subprocess.PIPE)
stdout, stderr = p.communicate()

方案2:保留bat文件,但显式调用cmd执行

如果必须保留bat文件,修改subprocess调用方式,确保用cmd.exe解析命令:

import os
import subprocess

if os.name == "nt":
    script = 'findstr /r something some_file > some_dir/some_file'
    script_name = 'wat.bat'
    with open(script_name, 'w') as f:
         f.write(script + '\n')
    # 显式调用cmd执行bat文件,指定工作目录
    script_dir = os.path.dirname(os.path.abspath(__file__))
    p = subprocess.Popen(
        ["cmd.exe", "/c", script_name],
        stderr=subprocess.PIPE,
        cwd=script_dir
    )
else:
    script = 'grep -E something some_file > some_dir/some_file'
    script_name = 'wat.sh'
    with open(script_name, 'w') as f:
         f.write(script + '\n')
    p = subprocess.Popen(["/bin/sh", script_name], stderr=subprocess.PIPE)
stdout, stderr = p.communicate()

调试建议

如果问题仍存在,可按以下步骤排查:

  • 在bat文件中添加echo %cd%,运行后查看输出,确认工作目录是否正确。
  • 单独在cmd中执行findstr something some_file,看是否有输出,排查源文件是否存在或目标字符串是否匹配。
  • 检查some_dir是否存在,若不存在需先创建(可在代码中加入os.makedirs("some_dir", exist_ok=True))。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 20:33:33