Python执行脚本并捕获输出
- 创业
- 2025-09-12 12:48:02

这里写目录标题 Piston API在线执行Pure PythonPiston API示例Piston API的局限性解决方案 使用subprocess执行本地脚本并捕获输出 Piston API在线执行Pure Python Piston API示例 import requests response = requests.post( " emkc.org/api/v2/piston/execute", json={ "language": "python", "version": "3.10.0", "files": [ # 必须用 files 数组包裹代码 {"content": "print(1+1)"} # 代码放在 content 字段中 ], }, ) print(response.json())
输出
{'stdout': '2\n', 'stderr': '', 'code': 0, ...} Piston API的局限性 emkc.org提供的Piston API是一个在线执行代码的服务,默认只预装少量基础库(如requests、numpy等常见库)。根据官方文档,它不支持动态安装第三方库,因此直接调用ortools会报错ModuleNotFoundError。验证方法:尝试在代码中添加print(requests.__version__),若返回版本号则说明requests已预装;而ortools会报错。 解决方案(1) 本地运行或使用支持自定义环境
本地安装Python和ortools:确保Python版本(如3.5.2)和ortools版本(如7.1.6722)兼容:pip install ortools==7.1.6722 使用Google Colab:Colab默认预装ortools,且支持动态安装其他库:!pip install ortools # 若未预装则运行 from ortools.linear_solver import pywraplp # 直接调用(2) 寻找支持自定义依赖的在线服务
Replit:在Replit的Python模板中,可通过poetry add ortools安装依赖。GitHub Codespaces:支持自定义Dockerfile或requirements.txt配置环境。(3) 调整代码兼容性(如必须使用Piston API)
若无法更换环境,可尝试将ortools相关的代码逻辑改写为纯Python实现,但仅适用于简单问题,复杂优化问题无法绕过库依赖。 使用subprocess执行本地脚本并捕获输出示例:
import subprocess def run_py_file(file_path): result = subprocess.run( ["python", file_path], capture_output=True, text=True, encoding="utf-8" ) return { "exit_code": result.returncode, "stdout": result.stdout, "stderr": result.stderr } # 调用示例 output = run_py_file("your_script.py") print(output["stdout"])your_script.py为:
print("")若your_script.py文件中有多个函数,需要传参,需要选择执行的函数,并正确传参: your_script.py为:
# your_script.py 内容示例 import argparse import sys import json def func1(a, b): print(f"func1 收到参数:{a} 和 {b}") def func2(text): print(f"func2 收到消息:{text}") if __name__ == "__main__": parser = argparse.ArgumentParser() parser.add_argument("--func", help="要调用的函数名") parser.add_argument("--args", help="JSON格式的参数列表") args = parser.parse_args() # 解析参数 if args.args: func_args = json.loads(args.args) else: func_args = [] # 动态获取函数并调用 func = getattr(sys.modules[__name__], args.func, None) if func: try: func(*func_args) except TypeError as e: print(f"参数错误:{e}", file=sys.stderr) sys.exit(1) else: print(f"错误:未找到函数 {args.func}", file=sys.stderr) sys.exit(1)使用subprocess:
import subprocess import json def run_py_file(file_path, func_name=None, args=None): cmd = ["python", file_path] if func_name: cmd.extend(["--func", func_name]) if args is not None: cmd.extend(["--args", json.dumps(args)]) result = subprocess.run( cmd, capture_output=True, text=True, encoding="gbk" # 修改编码为系统默认 ) return { "exit_code": result.returncode, "stdout": result.stdout, "stderr": result.stderr } # 调用 func1 并传递两个参数 output = run_py_file("./src/test/your_script.py", "func1", ["Hello", 123]) print(output["stdout"]) # 输出:func1 收到参数:Hello 和 123 # # 调用 func2 并传递一个参数 # output = run_py_file("your_script.py", "func2", ["测试消息"]) # print(output["stdout"]) # 输出:func2 收到消息:测试消息输出结果为:
PS C:\Users\pengkangzhen\PycharmProjects\llm-ecr> & C:/Users/pengkangzhen/anaconda3/python.exe c:/Users/pengkangzhen/PycharmProjects/llm-ecr/src/test/test.py func1 收到参数:Hello 和 123Python执行脚本并捕获输出由讯客互联创业栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“Python执行脚本并捕获输出”