如何使用Python subprocess模块将CSV文件输入值传递给exe可执行文件
问题核心原因
你当前的代码将CSV完整内容作为命令行启动参数传递给exe,但该exe为交互式程序,运行过程中需要从标准输入(stdin)逐行读取输入参数,而非启动时的命令行参数,因此参数无法被正确识别。
修正后的代码示例
import subprocess import csv # 读取CSV内容,每行对应一个输入参数,末尾添加换行符模拟手动回车操作 input_content = [] with open(r'C:\Users\NH.csv', 'r', encoding='gbk') as f: csv_reader = csv.reader(f) for row in csv_reader: # 若单条输入包含多个空格分隔的参数,可调整为' '.join(row) + '\n' input_content.append(row[0].strip() + '\n') input_str = ''.join(input_content) # 启动目标exe,配置标准输入管道 proc = subprocess.Popen( [r'C:\Users\NGP.exe'], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True, encoding='gbk', shell=False ) # 传入所有输入参数,等待程序执行完成 stdout, stderr = proc.communicate(input=input_str) # 可选:打印运行日志排查问题 print("程序运行输出:", stdout) if stderr: print("程序运行报错:", stderr)
注意事项
- 若Windows下运行出现中文乱码、参数识别错误,可调整CSV读取和Popen的
encoding参数为utf-8或对应程序使用的编码 - 不要保留
shell=True配置,除额外安全风险外,还可能导致标准输入传递链路多一层中转,出现不可预期的异常 - 若CSV每行包含多个需要同时输入的参数,可将行内所有字段用空格拼接后再加换行符即可
内容的提问来源于stack exchange,提问作者P_J
相关产品推荐
相关产品推荐

