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

如何用Python自动执行需分步输入的CMD程序program.exe?

解决program.exe自动化输入与重复执行问题

为啥你原来的代码没用?

你用Start cmd /k会新开一个独立的CMD窗口,Python脚本根本没法控制这个窗口的输入,所以后面的Input 1这些命令完全传不到program.exe里,自然没效果。

正确实现代码(基础版)

直接启动program.exe,用subprocess的管道给它传输入,一次性把三个输入按顺序发过去:

import subprocess
import time

def run_program():
    # 直接启动program.exe,不要嵌套CMD
    proc = subprocess.Popen(
        "program.exe",
        stdin=subprocess.PIPE,  # 允许给程序发输入
        stdout=subprocess.PIPE,  # 可选,捕获程序输出
        stderr=subprocess.PIPE,  # 可选,捕获错误信息
        text=False  # 字节模式,新手先保持这个设置
    )
    # 把三个输入按顺序拼接,每个输入后跟换行符(模拟按回车)
    input_content = b"1\n2\n3\n"
    # 发送输入,等待程序执行完毕
    stdout, stderr = proc.communicate(input=input_content)
    
    # 调试用:打印输出和错误(Windows CMD默认编码是gbk,按需调整)
    print("程序输出:", stdout.decode("gbk"))
    print("错误信息:", stderr.decode("gbk"))
    
    # 检查程序是否正常退出
    print(f"程序返回码: {proc.returncode}")

# 重复执行示例,比如跑3次
for _ in range(3):
    run_program()
    time.sleep(1)  # 可选,等待文件写入完成

关于communicate方法

这个方法就是帮你做三件事:

  1. 把你传的input内容全部发给子进程的标准输入
  2. 等待子进程完全结束
  3. 返回程序的输出和错误信息
    它比自己手动写stdin.write更稳妥,能避免输入缓冲导致的问题。

进阶场景:程序有处理延迟

如果program.exe在输入2之后需要花时间写入CSV,这时候一次性发三个输入可能会出错,就得分步发,加等待时间:

import subprocess
import time

def run_program_with_delay():
    proc = subprocess.Popen(
        "program.exe",
        stdin=subprocess.PIPE,
        stdout=subprocess.PIPE,
        stderr=subprocess.PIPE,
        text=True,  # 字符串模式,不用加b前缀
        encoding="gbk"
    )
    # 输入1,然后刷新缓冲区(确保程序能收到)
    proc.stdin.write("1\n")
    proc.stdin.flush()
    time.sleep(1)  # 等待程序处理输入1
    
    # 输入2
    proc.stdin.write("2\n")
    proc.stdin.flush()
    time.sleep(5)  # 等待程序写入CSV,时间按需调整
    
    # 输入3终止程序
    proc.stdin.write("3\n")
    proc.stdin.flush()
    
    # 等待程序结束,获取输出
    stdout, stderr = proc.communicate()
    print("输出:", stdout)
    print("错误:", stderr)

# 重复执行
for _ in range(3):
    run_program_with_delay()

注意事项

  • 确保program.exe的路径正确,如果不在当前脚本目录,要写绝对路径,比如"C:\\path\\to\\program.exe"
  • Windows下编码一般用gbk,如果程序输出是其他编码,要对应调整decode的参数
  • 循环次数和等待时间根据你的实际需求修改

内容的提问来源于stack exchange,提问作者Fish

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 20:05:13