如何在Python中为subprocess.run调用的解码器进程传递回车键
问题与解决方案
问题描述
我尝试通过Python脚本逐个将日志文件传入解码器EXE以生成CSV文件,使用的代码如下:
p = subprocess.run(["wine", DECODER_EXE_PATH, str(decompressed_file_path)], capture_output=True, text=True)
遇到的问题:每个文件解码完成后,解码器EXE会等待按下回车键才会退出,导致脚本处理完第一个文件后就卡住无法继续执行。
另外,在Windows系统中直接将日志文件拖放到解码器时,解码完成后命令提示符会显示:「Decode complete, press Enter to exit...」(即解码完成,按回车键退出)。
解决方法
方法1:通过subprocess.run的input参数自动传入回车
直接在subprocess.run中添加input="\n"参数,让脚本自动向解码器发送回车键:
p = subprocess.run( ["wine", DECODER_EXE_PATH, str(decompressed_file_path)], capture_output=True, text=True, input="\n" # 自动传递回车键 )
如果解码器存在多次等待回车的场景,可以传入多个换行符,比如input="\n\n"。
方法2:使用subprocess.Popen配合communicate()处理交互
如果需要更灵活地控制输入输出,可以使用Popen对象的communicate()方法:
import subprocess p = subprocess.Popen( ["wine", DECODER_EXE_PATH, str(decompressed_file_path)], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True ) # 发送回车键并获取执行结果 stdout, stderr = p.communicate(input="\n")
内容的提问来源于stack exchange,提问作者RKIDEV
相关产品推荐
相关产品推荐

