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
相关产品推荐
相关产品推荐

