【问题标题】:Sending a keystroke to Python subprocess without stdin-PIPE在没有 stdin-PIPE 的情况下向 Python 子进程发送击键
【发布时间】:2015-06-04 09:16:08
【问题描述】:

我有一个 Windows 命令行应用程序,它将输出打印到标准输出,然后无限期地等待击键结束。我使用这样的函数来处理它:

def run_command_on_windows(command):
    """
    Run commandline program on Windows OS (current)
    :param command: command to run (string)
    :return: returns result of command
    """
    p = subprocess.Popen(['c:\\windows\\system32\\cmd.exe', '/c'] +   command.split(),
                         stdout=subprocess.PIPE, stderr=subprocess.PIPE)
    output, err = p.communicate()
    p.stdin.write('\n\n')
    rc = p.returncode

    return output.split('\r\n')

如果我可以在 Popen 中使用“stdin=subprocess.PIPE”,一切都会变得简单,但我不能,因为当我这样重定向标准输入时,应用程序会立即崩溃。

p.stdin.write('\n\n')

不起作用,因 AttributeError 而崩溃。

有没有办法解决这个问题?

【问题讨论】:

    标签: python python-2.7 subprocess


    【解决方案1】:

    编写一个 CMD 脚本并通过 I/O 重定向调用其中的命令。尝试echo | ... 使命令结束。

    您也可以尝试关闭标准输入,这样命令就不能等待按键:... < nul:

    如果这不起作用,请将换行符写入文件并使用... < file

    如果这也不起作用,您将不得不更改程序的源代码(它可能使用一些特殊代码来读取键盘)或使用p.terminate() 终止它

    【讨论】:

    • 程序将在任何尝试重定向标准输入时崩溃,
    • 或者杀了它。这不是很好,但它不是一个很好的程序:-)
    猜你喜欢
    • 2018-09-19
    • 1970-01-01
    • 1970-01-01
    • 2011-07-07
    • 2020-05-07
    • 2020-06-12
    • 1970-01-01
    • 1970-01-01
    • 2012-01-06
    相关资源
    最近更新 更多