【发布时间】:2014-02-28 00:48:03
【问题描述】:
我需要控制一个 Windows 程序,该程序通过从 <conio.h> 调用 _kbhit 和 _getch 直接从控制台读取输入。可以在此处找到此类程序的示例:https://stackoverflow.com/a/15603102/365492
在 Linux 上,我可以使用 pty.openpty() 创建新的伪终端并模拟按键。看这个例子:https://code.google.com/p/lilykde/source/browse/trunk/lilykde/py/runpty.py
在 Windows 上,我尝试写信给 CONIN$/CONOUT$,但我只能看到我的数据出现在控制台上,而子进程忽略了它。
代码如下:
#!/usr/bin/env python
import subprocess
import time
TEST_EXECUTABLE = 'C:\\dev\\test.exe'
TEST_INPUT = 'C:\\dev\\input.txt'
def main():
with open(TEST_INPUT, mode='r') as test_input, open('CONOUT$', mode='wb') as conout:
test_exec = subprocess.Popen([TEST_EXECUTABLE],
bufsize=0,
stdin=None,
stdout=None,
stderr=None)
for cmd in test_input:
cmd = cmd.strip('\r\n')
conout.write(cmd)
conout.flush()
time.sleep(1)
ret = test_exec.wait()
print '%s (%d): %d' % (TEST_EXECUTABLE, test_exec.pid, ret)
pass
if __name__ == "__main__":
main()
有可能吗?如何模拟用户与子进程的交互?
谢谢。 亚历克斯
【问题讨论】:
标签: python windows terminal console pty