我正在尝试使用Python与Windows命令行程序进行交互。我为此使用了subprocess
模块。下面是启动程序的代码。
kwargs = dict(stdin=subprocess.PIPE,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
universal_newlines=True)
p = subprocess.Popen("ansys191.exe", **kwargs)
这将使用新的控制台窗口打开程序。我可以使用以下代码从其stdout
中读取内容。
while True:
line = p.stdout.readline().strip()
if line: print(line)
if line.startswith("BEGIN:") or line.startswith("PREP7:"):
break
启动后,程序将以BEGIN:
提示符停止。它不会退出。但是,当我尝试将命令写入其stdin
时,例如下面的命令将无法正常工作。
p.stdin.write("/prep7")
p.stdout.readline() #Blocks here
这是代码和窗口的屏幕截图。该命令没有打开其他窗口。
在读取“ / prep7”命令之后,该程序应该向stdout
写一些文本并以PREP7:
提示符停止。但是,如果我在新的控制台窗口中键入内容,则可以从其stdout
中读取更多数据。
我在这里错过了什么吗?我是否必须使用win32gui
来找到窗口的句柄并将其写入?