在Windows上使用Python的subprocess.communicate()时出现问题

在Windows上使用Python的subprocess.communicate()时出现问题,python,subprocess,Python,Subprocess,我有一个应用程序,我正试图通过Python和子流程模块来控制它。基本上,我要做的是使用Popen启动应用程序,它打开一个命令提示符,程序在其中执行,然后在执行过程中的某个时间点,我需要向该程序的STDIN发送一个字符串a命令。除了在Python已经启动的应用程序的命令窗口中手动键入一个按钮之前,命令不会得到处理之外,这一切都很好。以下是我的部分代码: cmd = 'quit\n' app.communicate(cmd.encode('utf-8')) 有什么想法吗 编辑1 是的,键入一个按钮

我有一个应用程序,我正试图通过Python和子流程模块来控制它。基本上,我要做的是使用Popen启动应用程序,它打开一个命令提示符,程序在其中执行,然后在执行过程中的某个时间点,我需要向该程序的STDIN发送一个字符串a命令。除了在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即可。谢谢

试试看:

cmd = 'quit\n\r'
编辑:

唯一适合我的是:

app = subprocess.Popen(["cmd.exe","testparam"],stdout=subprocess.PIPE,stdin=subprocess.PIPE)
app.stdin.write('exit\r\n')
因为正如所说:

Popen.communicateinput=无

与流程交互:将数据发送到 斯丁。从标准输出读取数据,然后 stderr,直到到达文件末尾。 等待进程终止。这个 可选输入参数应为 要发送给子对象的字符串 流程,如果不应提供数据,则为无 给孩子的


好的,我刚试过,我仍然有同样的问题。谢谢你!理论上,它是\r\n而不是\r\n,不确定这是否会对应用程序产生影响。为了避免转换字符串,可以在调用Popen时将可选的universal_newlines参数设置为True。通常在Windows上,管道是以二进制模式打开的,实际上,如果您不使用此选项,则必须按照bua的建议执行操作,并加上其他一些操作。因此,与您的问题无关,请使用此选项或添加。\r\n您是否可以确认,通过键入按钮,您的意思是按键盘键-我想是的,但只是为了避免混淆。这是一个普通的控制台应用程序吗?你的电话是什么样子的?也许你的代码多粘贴一点,没有多少工作要做。