我需要使用老式的DOS / Windows可执行文件(源代码不可用)。它使用两个输入文件并生成一个输出文件。
我必须使用不同的输入文件运行数千次。我写了一个简单的python脚本循环输入文件来自动执行此操作。
问题是这个exe完成了每次运行的不朽"按Enter键#。
我启动脚本,按住键,然后返回'积累在bufor中,脚本运行一段时间产生几个输出。
还有更优雅的方法可以继续(即不使用手指并盯着显示器)?
我已经尝试了一些明显的解决方案(例如os.system(' return'),os.system(' \ n'))但它们不起作用。
第二天编辑: @Eric,非常感谢代码,它的工作原理。我也感谢其他人的贡献,并对评论中的书面问题和未格式化的代码表示抱歉(这是凌晨3点30分:):
答案 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")