【问题标题】:press enter via python script通过python脚本按回车
【发布时间】:2013-02-26 22:50:15
【问题描述】:

我们正在尝试创建一个 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()

【问题讨论】:

  • proc.stdin 可能已缓冲。如果是,您将需要执行proc.stdin.flush() 以确保该过程已收到您发送的所有字符。我不知道这是否能解决您的问题。

标签: python pywin32


【解决方案1】:

不完全确定如何在 python 中执行此操作,但我的建议是模拟实际的“输入”按键命令。在您的代码中,您只是在更改插入符号的位置,而不是发出正确的返回。

看看这个:http://win32com.goermezer.de/content/view/136/254/

import win32com.client
shell = win32com.client.Dispatch("WScript.Shell")
shell.SendKeys("{ENTER}", 0) 

看来这正是你所需要的。

【讨论】:

  • 添加一个小代码示例,这将是我的 +1,以防链接失效。
  • 您好 Zorle 感谢您的回复;我试过了,效果还是一样,没有按回车键
  • 尝试在普通的控制台窗口上测试它。看看您是否可以使用此代码将字母和其他内容注入其中。如果没有,请继续尝试,直到可以达到一个阶段。那么它应该很容易转移到您的实际脚本中。
【解决方案2】:

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

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()

【讨论】:

  • 您好 Martineau,感谢您的回复。它不起作用 - 仍然是相同的效果;没有看到 Enter 键进入以推送到下一个向导步骤。
  • 太糟糕了。应用程序可能没有读取标准输入,在这种情况下,您可能需要使用其他 PyWin32 模块之一来执行您想要的操作。尝试谷歌搜索windows simulate keyboard input。有一个名为 pywinauto 的东西也可能适用于控制台应用程序。
  • 您好,martineau 感谢您的回复。我们仍在努力让它发挥作用。
猜你喜欢
  • 2023-03-26
  • 1970-01-01
  • 1970-01-01
  • 2019-02-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多