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

带输入参数的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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 05:39:32