如何使用Python3与Windows上的控制台应用程序交互



我正在尝试编写一个简单的脚本,与Windows上的控制台应用程序交互。

问题是应用程序不接受参数,所以像这样的

out = subprocess.check_output(["application.exe", "command1", "command2"])

行不通。

我也尝试使用子进程。PIPE,但它也不起作用。下面是我的尝试:

p = subprocess.Popen("application.exe", stdin=subprocess.PIPE, stdout=subprocess.PIPE)
p.stdin.write('command1n'.encode('utf-8'))
result1 = p.stdout.read()
p.stdin.write('command2n'.encode('utf-8'))
result2 = p.stdout.read()

我不想终止进程。有什么办法吗?我错过什么了吗?

任何帮助都将不胜感激。

乌利希期刊指南:

重要的是,应用程序本身是交互式的。

我有了这段代码,作为输出,它打印了"Here"和冻结。完全没有错误。所以在out = p.stdout.read()行之后所有东西都冻结了。

p = subprocess.Popen("APP.exe", stdin=subprocess.PIPE, 
stdout=subprocess.PIPE, shell = True)
p.stdin.write('COMMAND1n'.encode('utf-8'))
p.stdin.write('COMMAND2n'.encode('utf-8'))
print("Here")
out = p.stdout.read()
print(out)

同样的事情是当我尝试out = subprocess.check_output(["application.exe"])时,它只是冻结,之后什么也没有发生。

当我尝试通过APP.exe < Commands.txt传递命令时,它工作得很好。所以我只有Command1nCommand2n在txt文件,并得到所需的输出。

当我在写入所需命令后添加p.communicate()时,一切都解决了。

现在的工作代码是这样的

p = subprocess.Popen("APP.exe", stdin=subprocess.PIPE, stdout=subprocess.PIPE, shell = True)
p.stdin.write('command1n'.encode('utf-8'))
p.stdin.write('command2n'.encode('utf-8'))
Output = p.communicate().decode('utf-8')

相关内容

最新更新