无法在Windows子进程中写入标准输入

时间:2018-12-18 10:31:17

标签: python windows subprocess ansys

我正在尝试使用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

这是代码和窗口的屏幕截图。该命令没有打开其他窗口。

Console window screenshot

在读取“ / prep7”命令之后,该程序应该向stdout写一些文本并以PREP7:提示符停止。但是,如果我在新的控制台窗口中键入内容,则可以从其stdout中读取更多数据。

我在这里错过了什么吗?我是否必须使用win32gui来找到窗口的句柄并将其写入?

0 个答案:

没有答案