如何通过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.system和subprocess.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




