我有一个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崩溃。
有没有办法解决这个问题?
答案 0 :(得分:0)
编写CMD脚本并使用I / O重定向调用其中的命令。尝试echo | ...
使命令结束。
您也可以尝试关闭stdin,以便命令无法等待按键:... < nul:
如果不起作用,请将新行写入文件并使用... < file
如果这也不起作用,你将不得不改变程序的来源(它可能使用一些特殊的代码来读取键盘)或用p.terminate()