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

Python使用exec/subprocess批量运行带input交互脚本的问题求助

可行实现方案

错误原因说明

你之前的方案失效核心有两个原因:

  • 原脚本使用input()从**标准输入流(stdin)**读取内容,并未读取命令行参数sys.argv,所以直接传参数给脚本完全无效
  • 调用subprocess时传入的输入内容不符合要求:原脚本需要2次输入,每次输入要以换行符结尾才会被input()识别为输入完成,你之前只传了1个输入且缺少换行符,导致程序一直等待输入阻塞或者异常退出

完整可运行代码

import os
import subprocess
import sys

# 配置参数:遍历的目录、输入的两个值
TARGET_DIR = "."  # 当前目录,可替换为你要遍历的目录路径
INPUT_PRICE = "1"
INPUT_PAY = "5"
# 构造标准输入内容,两次输入用换行分隔,末尾加换行确保最后一次input读取完成
stdin_content = f"{INPUT_PRICE}\n{INPUT_PAY}\n"

# 遍历目录下所有.py文件,你可以修改匹配规则筛选你要运行的脚本
for filename in os.listdir(TARGET_DIR):
    if not filename.endswith(".py"):
        continue
    file_path = os.path.join(TARGET_DIR, filename)
    print(f"===== 正在运行脚本:{filename} =====")
    
    try:
        # 启动子进程运行脚本
        proc = subprocess.Popen(
            [sys.executable, file_path],
            stdin=subprocess.PIPE,
            stdout=subprocess.PIPE,
            stderr=subprocess.PIPE,
            text=True,
            encoding="utf-8"
        )
        # 传入输入,等待运行完成,捕获输出
        stdout, stderr = proc.communicate(input=stdin_content, timeout=10)
        
        # 处理运行结果
        if proc.returncode == 0:
            print("运行成功,输出内容:")
            print(stdout)
            # 如果需要存到文件可以取消注释下方代码
            # with open(f"{filename}_output.txt", "w", encoding="utf-8") as f:
            #     f.write(stdout)
        else:
            print(f"运行出错,错误码:{proc.returncode},错误信息:")
            print(stderr)
    except subprocess.TimeoutExpired:
        print(f"脚本运行超时,已强制终止")
        proc.kill()
    except Exception as e:
        print(f"调用异常:{str(e)}")

功能说明

  • 自动遍历指定目录下所有Python脚本依次运行
  • 自动传入你需要的两个输入值,无需手动操作
  • 自动捕获每个脚本的正常输出和错误输出,可直接打印也可以存到本地文件
  • 加入超时机制避免异常脚本一直阻塞

内容的提问来源于stack exchange,提问作者Maciek Woźniak

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 00:30:00