在没有stdin-PIPE的情况下向Python子进程发送键击

时间:2015-06-04 09:16:09

标签: python python-2.7 subprocess

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

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',那么一切都会很容易,但我不能,因为当我重定向这样的stdin时应用程序会立即崩溃。

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

不起作用,与AttributeError崩溃。

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

1 个答案:

答案 0 :(得分:0)

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

您也可以尝试关闭stdin,以便命令无法等待按键:... < nul:

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

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

来杀死它。