我正在尝试编写一个简单的脚本,与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')