通过python脚本按enter键

通过python脚本按enter键,python,pywin32,Python,Pywin32,我们正在尝试创建一个python脚本,通过windows shell提示符安装应用程序,执行我们的python脚本。app.exe中有一个输出提示,指示 “按Enter键继续…” 我们试图模拟Enter键,但它不起作用。提示仍然没有移动到向导的下一步 我们如何克服这个问题 import subprocess import win32console APP_BIN = 'app.exe' def main(): proc = subprocess.Popen([APP_BIN,'-i'

我们正在尝试创建一个python脚本,通过windows shell提示符安装应用程序,执行我们的python脚本。app.exe中有一个输出提示,指示 “按Enter键继续…”

我们试图模拟Enter键,但它不起作用。提示仍然没有移动到向导的下一步

我们如何克服这个问题

import subprocess
import win32console

APP_BIN = 'app.exe'

def main():
    proc = subprocess.Popen([APP_BIN,'-i','console'],stdin=subprocess.PIPE,
                                                     stdout=subprocess.PIPE)
    proc.stdin.write("\r\n")            <--- issue
    output = proc.stdout.readline()     <--- issue
    print output
    ret = proc.wait()
    print ret

if __name__ == '__main__':
    main()
导入子流程
导入Win32控制台
APP_BIN='APP.exe'
def main():
proc=subprocess.Popen([APP_BIN,'-i',console'],stdin=subprocess.PIPE,
stdout=子流程(管道)

proc.stdin.write(“\r\n”)不完全确定如何在python中执行,但我的建议是模拟实际的“enter”按键命令。在代码中,您只是更改插入符号的位置,而没有发出正确的返回

看看这个:

看起来这正是您需要的。

以下方法可能有效(未经测试):


添加一个小的代码示例,它将是我的+1,以防链接消失;我尝试了,但仍然有相同的效果,没有捕捉回车键尝试在普通控制台窗口上测试它。看看是否可以使用此代码向其中注入字母和其他内容。如果没有,继续尝试,直到你能达到一个阶段。然后就可以很容易地转移到实际的脚本中。
proc.stdin
很可能是缓冲的。如果是,您需要执行
proc.stdin.flush()
,以确保进程已接收到您发送的所有字符。我不知道这是否能解决你的问题。嗨,马蒂诺,谢谢你的回复。它不起作用——仍然有同样的效果;没有看到enter键进入下一个向导步骤。设置为错误。有可能应用程序没有读取stdin,在这种情况下,您可能需要使用另一个PyWin32模块来执行您想要的操作。尝试用谷歌搜索
windows模拟键盘输入
。有一种叫做的东西可能也适用于控制台应用。嗨,martineau,谢谢你的回复。我们仍在努力让它发挥作用。
import win32com.client
shell = win32com.client.Dispatch("WScript.Shell")
shell.SendKeys("{ENTER}", 0) 
import subprocess
import win32console

APP_BIN = 'app.exe'

def main():
    proc = subprocess.Popen([APP_BIN,'-i','console'],stdin=subprocess.PIPE,
                                                     stdout=subprocess.PIPE)
    stdoutdata, stderrdata = proc.communicate(input="\r\n")
    output = stdoutdata.readline()
    print output
    ret = proc.wait()
    print ret

if __name__ == '__main__':
    main()