带输入参数的py脚本转exe后如何在其他py脚本中正常调用
问题排查与修复方案
你的代码运行失败是4个明确的错误导致的,逐一修正即可:
- 拼写错误:script2中导入模块的语句写错了,应为
import subprocess,而非impose subprocess - 打包参数错误:
-w参数的作用是打包无控制台的GUI程序,会禁用标准输入输出流,你的脚本是控制台打印逻辑,使用该参数会导致输入输出完全无法正常通信 - 参数类型错误:
subprocess.run向exe传递的参数只能是字符串类型,你直接传入Python列表对象x,exe作为独立进程根本识别不了Python内存里的对象,只能接收到字符串格式的命令行参数 - script1逻辑缺失:你写的script1只定义了
func函数,既没有读取命令行传入的参数,也没有主动调用func函数,就算参数传对了也不会执行任何计算逻辑
可直接运行的修正代码
1. 修正script1.py
需要引入sys读取命令行参数,引入json做结构化数据的反序列化,同时添加入口执行逻辑:
import sys import json def func(x): c = sum(x) print(c) if __name__ == "__main__": # sys.argv[0]是exe自身的路径,从索引1开始读取传入的参数 input_list = json.loads(sys.argv[1]) func(input_list)
2. 修正打包命令
去掉-w参数,执行打包:
pyinstaller -F script1.py
打包完成后,生成的可执行文件在项目目录下的dist文件夹内。
3. 修正script2.py
将待传递的列表序列化为json字符串后再传入exe,同时配置subprocess的输出捕获参数:
import subprocess import json x = [1, 2, 3] # 结构化数据序列化为字符串,避免参数拆分、特殊字符转义问题 param = json.dumps(x) # 替换为你本地script1.exe的实际绝对路径 exe_path = r"C:\your\actual\path\dist\script1.exe" run_result = subprocess.run( [exe_path, param], capture_output=True, text=True, check=True ) # 读取exe的打印输出 print("exe计算结果:", run_result.stdout.strip())
补充说明
如果传递的是简单数字、短文本这类简单参数,可以直接转成字符串传递,在script1中再转回对应类型即可;如果是列表、字典这类结构化数据,用json序列化/反序列化的方案通用性最强,不会出现空格、特殊字符导致参数拆分错误的问题。
内容的提问来源于stack exchange,提问作者succeden
相关产品推荐
相关产品推荐

