【问题标题】:Using subprocess module to enter key strokes into cmd使用 subprocess 模块将击键输入到 cmd
【发布时间】:2017-03-25 19:20:31
【问题描述】:

我正在使用 Popen 运行一个可执行文件,一旦该可执行文件正在运行并且 cmd 打开,我想按顺序传输两个击键(数字)。正如此屏幕截图所示,cmd 会提示用户:

如何使用 subprocess 模块将这些击键(数字)传送到我的进程?我的代码如下,我需要使用process.communicate()吗?

# Run executable and pass an argument to that executable.

process = subprocess.Popen('CalcSoilSurfTemp.exe C:\Users\szilasia\Desktop\epws\USA_TX_Lubbock.Intl.AP.722670_TMY3.epw',stdin=subprocess.PIPE)

process.communicate() # How do I pipe keystrokes(numbers) into the process?

非常感谢!,

编辑:

我习惯了代码 - process.communicate(input = '1\n2') 依次输入 1 和 2,无需转换为字节,因为我使用的是 Python 2.7,而且这种转换是隐含的

【问题讨论】:

    标签: python subprocess


    【解决方案1】:

    communicate doc 表示使用input=b'<chars>'。输入必须是字节,因为输入通过管道传输二进制数据。确切地说,您发送的内容取决于程序的要求。要选择第一个选项,使用input() 的python 程序需要b'1\n',而使用不同输入函数的程序可能只需要b'1'。要发送两个选项,请将两个所需的字节对象连接成一个。准备好进行实验。我相信process.communicate()只能调用一次,所以必须先发送一个预定的输入流,在子流程结束后得到两个输出流。

    请让我知道此答案是否适用于您的系统(Windows,出现)。

    【讨论】:

    • 谢谢它的工作我只是使用下面的代码 process.communicate(input = '1\n2') 我使用的是 Python 2.7,所以不需要从字符串转换为字节,因为这是自动
    • 在 2.7 中,str is bytes,所以b 前缀将使您的代码面向未来。但对您来说,这种需求可能还需要几年时间。
    猜你喜欢
    • 1970-01-01
    • 2021-02-01
    • 2019-04-15
    • 1970-01-01
    • 2021-08-29
    • 2016-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多