我有一个应用程序,我试图通过Python和子进程模块控制。基本上我所做的是使用Popen启动应用程序(打开程序执行的命令提示符)然后在执行的某个时间点我需要向该程序的STDIN发送一个字符串(命令) 。这工作正常,除非我手动在Python已启动的应用程序的命令窗口中键入一个按钮之前不会处理该命令。这是我的代码的一部分:
cmd = 'quit\n'
app.communicate(cmd.encode('utf-8'))
有什么想法吗?
编辑#1
是的,键入一个按钮确实意味着按下键盘上的一个键,抱歉让人感到困惑。我在下面添加了更多代码
app = Popen(['runProg.exe', '-m', '20'], stdin=PIPE, universal_newlines=True)
while not os.path.exists('C:/temp/quit-app.tmp'): time.sleep(1)
app.communicate('quit')
os.remove('C:/temp/quit-app.tmp')
那么应该发生的是程序应该运行直到创建quit-app.tmp文件;一旦它被创建,“quit”应该被发送到应用程序,这是一个命令,它可以干净地关闭。如果一个人正在运行这个程序,他们只需在命令窗口中输入“quit”即可。谢谢!
答案 0 :(得分:0)
尝试:
cmd = 'quit\n\r'
编辑:
只有对我有用的事情是:
app = subprocess.Popen(["cmd.exe","testparam"],stdout=subprocess.PIPE,stdin=subprocess.PIPE)
app.stdin.write('exit\r\n')
因为documentation说:
Popen.communicate(输入=无)
与流程交互:将数据发送到 标准输入。从stdout和。读取数据 stderr,直到达到文件结尾。 等待进程终止。该 可选的输入参数应该是a 要发送给孩子的字符串 进程,或无,如果没有数据 寄给孩子。