【问题标题】:Python (os): how to simulate pressing Enter while executing an external applicationPython(os):如何在执行外部应用程序时模拟按 Enter
【发布时间】:2017-12-17 14:24:28
【问题描述】:

我需要使用老式的 DOS/Windows 可执行文件(源不可用)。它使用两个输入文件并生成一个输出文件。

我必须使用不同的输入文件运行数千次。我编写了一个简单的 python 脚本循环输入文件以自动执行此操作。

问题在于,这个 exe 以不朽的“按 Enter”完成每一次运行。

我启动脚本,按住键,'returns' 累积在 bufor 中,脚本运行一段时间产生多个输出。

有没有更优雅的方式(即不使用手指并盯着显示器)?

我已经尝试了一些明显的解决方案(例如 os.system('return')、os.system('\n')),但它们不起作用。

次日修改: @Eric,非常感谢您的代码,它有效。我也感谢其他做出贡献的人,并对评论中草率的问题和未格式化的代码感到抱歉(当时是凌晨 3.30 :)

【问题讨论】:

  • 你应该提供代码示例
  • 我用的是Linux,代码如下: import os import os for i in range(1, 20001): a=str(i) command="wine executable.exe input"+a+" .txt > output"+a+".txt" os.system(command) #executable.exe产生output1.txt并等待回车键
  • 编辑您的 OP 以正确发布代码 :-)

标签: python operating-system


【解决方案1】:

使用 Python 的 subprocess 模块并使用 Popen 运行您的可执行文件。

然后你可以用communicate向进程发送“enter”。

【讨论】:

    【解决方案2】:

    根据您评论中的信息,我认为您想要的是:

    import subprocess
    
    for i in range(1, 20001):
        command = "wine executable.exe input{number}.txt > output{number}.txt".format(number=i)
        p = subprocess.Popen(command, stdin=subprocess.PIPE, shell=True)
        # send a newline
        p.communicate(input="\n")
    

    【讨论】:

    • 需要是:subprocess.Popen
    • 更改为python p.communicate(input='\n'.encode())
    【解决方案3】:

    你试过os.system(‘\r\n’)吗?我认为这是 windows 上的换行符。

    编辑:您的答案还使用了正斜杠而不是反斜杠——当然也可以尝试其他方式,除非这只是一个错字。

    【讨论】:

    • 是的,应该是评论,但我还没有评论的声誉......
    • 还是错了。 os.system 不会将击键发送到另一个程序。
    猜你喜欢
    • 2016-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多