Python(os):如何在执行外部应用程序时模拟按Enter键

时间:2017-07-13 01:07:29

标签: python operating-system

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

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

问题是这个exe完成了每次运行的不朽"按Enter键#。

我启动脚本,按住键,然后返回'积累在bufor中,脚本运行一段时间产生几个输出。

还有更优雅的方法可以继续(即不使用手指并盯着显示器)?

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

第二天编辑: @Eric,非常感谢代码,它的工作原理。我也感谢其他人的贡献,并对评论中的书面问题和未格式化的代码表示抱歉(这是凌晨3点30分:):

3 个答案:

答案 0 :(得分:1)

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

然后,您可以使用communicate向该流程发送“enter”。

答案 1 :(得分:0)

你试过import javafx.application.Application; import javafx.scene.Scene; import javafx.scene.control.Button; import javafx.scene.layout.VBox; import javafx.scene.text.Font; import javafx.scene.text.Text; import javafx.stage.Stage; import javafx.stage.StageStyle; public class Main extends Application { @Override public void start(Stage stage) { stage.initStyle(StageStyle.TRANSPARENT); Text text = new Text("!"); text.setFont(new Font(40)); VBox box = new VBox(); Button btn = new Button("Test transparent"); box.getChildren().addAll(text, btn); //if I removed the btn, transparent works as expected. final Scene scene = new Scene(box,300, 250); scene.setFill(null); stage.setScene(scene); stage.show(); } public static void main(String[] args) { launch(args); } } 吗?我认为这是Windows上的换行符。

编辑:您的回答也使用正斜杠而不是反斜杠 - 绝对尝试其他方式,除非这只是一个错字。

答案 2 :(得分:0)

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

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")