如何使用子流程保持xfoil打开

时间:2019-05-06 12:53:49

标签: python python-3.x subprocess

摘要

我正在使用subprocess模块来自动化xfoil。我希望能够使用几个命令来启动xfoil会话,并保持打开状态以供用户使用。 这将有助于调试,并且更一般而言,它具有启动xfoil的基本例程(无需每次都手动键入相同的命令集)。

我可以使用subprocess.communicate()运行任何xfoil命令。 但是,当使用subprocess打开时,xfoil将系统关闭,而无需用户进行操作。

示例

使用以下代码,您可以看到xfoil快速打开和关闭。

import subprocess

XFOIL_PATH = 'xfoil.exe'

xfoil = subprocess.Popen(XFOIL_PATH, stdin=subprocess.PIPE, stdout=subprocess.PIPE,
                         stderr=subprocess.PIPE,
                         universal_newlines=True)

actions = 'NACA 0012\nGDES\n'
xfoil.communicate(input=actions)

注意

我将subprocess.Popen()与Rhino一起使用,Rhino保持打开状态,直到我手动关闭它为止。我不明白为什么xfoil的行为会有所不同。

我怀疑这与特定应用程序的标准输出有关,但这是一个疯狂的猜测。希望可以对此做点什么。

1 个答案:

答案 0 :(得分:1)

我的理解是,当您使用communicate()参数调用input时,该调用将关闭stdin,从而终止 xfoil.exe 进程。请尝试以下操作,而不要致电communicate()

xfoil.stdin.write(actions)
xfoil.stdin.flush()

此后,过程将继续直到您退出脚本。

更新

如果您希望xfoil项目即使在脚本结束后仍继续运行,请调查pexpect。