You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何通过Python代码为其他Python脚本自动输入并批量自动化运行?

实现Python脚本自动输入的简洁方案

嘿,这个场景我太熟悉了!既然没法修改目标script.py的代码,也没法用命令行参数传递输入,那Python自带的subprocess模块就是完美的解决方案——它能精准控制子进程的标准输入,还能解决你之前用echo管道遇到的EOF问题,几行代码就能搞定自动化。

直接上代码示例,这是最简洁的实现:

import subprocess

# 按脚本要求的顺序定义输入内容,每行对应一次输入,结尾加换行确保触发EOF
input_content = "4\n5\n6\n"

# 启动目标脚本并传递输入
process_result = subprocess.run(
    ["python", "script.py"],
    input=input_content.encode(),  # 将字符串转为字节流传递给子进程标准输入
    capture_output=True,            # 可选:捕获脚本的输出和错误信息,方便调试
    text=False
)

# 可选:打印脚本的输出和错误,确认运行结果
print("脚本输出内容:", process_result.stdout.decode())
print("脚本错误信息:", process_result.stderr.decode())

为什么这能解决问题?

  • subprocess.run()是Python 3.5+官方推荐的子进程管理方式,比老旧的os.systemsubprocess.Popen更简洁易用。
  • input参数会直接把内容写入子进程的标准输入,结尾的换行符\n不仅能让脚本识别每一次输入,还能正确触发EOF,刚好解决你之前用echo管道时因为没有EOF导致脚本卡住的问题。
  • 如果你的脚本输入要求不是换行分隔,只需要调整input_content的格式就行,比如用空格或其他分隔符,完全匹配脚本的输入逻辑。

要是你需要批量运行多个脚本,把这段代码封装成函数就更方便了:

import subprocess

def auto_run_script(script_path, input_list):
    # 将输入列表转为换行分隔的字符串,结尾加换行确保EOF
    input_str = "\n".join(input_list) + "\n"
    return subprocess.run(
        ["python", script_path],
        input=input_str.encode(),
        capture_output=True
    )

# 批量运行示例
script_list = ["script1.py", "script2.py", "script3.py"]
required_inputs = ["4", "5", "6"]

for script in script_list:
    print(f"正在执行 {script}...")
    result = auto_run_script(script, required_inputs)
    print(f"执行结果输出:{result.stdout.decode()}")
    print("---")

这样就能轻松批量自动化所有需要输入的脚本,完全不用碰目标脚本的代码~

内容的提问来源于stack exchange,提问作者Dersu Giritlioğlu

火山引擎 最新活动