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

Windows下Python Popen执行exe无法将命令行输出写入日志文件问题

问题解决:Windows下捕获新CMD窗口中EXE的输出到日志文件

问题根源

你当前的代码中,重定向符号>> log.log 2>&1是作用在start命令本身,而非新启动的CMD窗口内的CoreServer.exe进程。新窗口里的命令没有配置重定向,所以EXE的输出不会写入日志文件,只有logging.info的内容能正常写入。

修正后的代码

def OpenCoreServer():
    os.chdir(coreServerFullPath)
    logging.info('your text goes here')  # 该内容会写入log.log
    # 将重定向逻辑放入新CMD窗口的执行命令中
    cmd_command = 'start cmd /k "CoreServer.exe -c -s >> log.log 2>&1"'
    # 移除不必要的管道参数,让新窗口自行处理输出重定向
    result = subprocess.Popen(cmd_command, shell=True, close_fds=True)
    time.sleep(4)
    print("ABCD")
    with open('log.log', 'r') as logg:
        print(logg.read())

关键说明

  • 重定向位置调整:把>> log.log 2>&1移到cmd /k后的引号内部,这样新启动的CMD窗口在执行CoreServer.exe时,会将标准输出和错误输出都追加到日志文件中。
  • 参数简化:去掉stdin=PIPE, stdout=PIPE, stderr=STDOUT,因为我们不需要Python父进程捕获输出,这些参数会干扰新窗口的输出逻辑。
  • 窗口行为可选:如果希望EXE执行完毕后自动关闭CMD窗口,可将/k替换为/c(/k会保留窗口,/c执行后关闭窗口)。

额外注意

如果CoreServer.exe的输出存在缓冲延迟,可能需要等待更长时间才能在日志中看到内容,或者在EXE程序内部设置无缓冲输出(比如C++中使用setvbuf,Python中使用flush=True等)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 07:17:31