首页 > 解决方案 > 如何使用子进程保持 xfoil 打开

问题描述

概括

我正在使用模块自动化xfoilsubprocess。我希望能够使用几个命令启动一个 xfoil 会话,并将其打开以供用户使用。这将有助于调试,并且更普遍地具有启动 xfoil 的基本例程(无需每次手动输入相同的命令集)。

我可以使用subprocess.communicate(). 但是,当使用subprocessxfoil 打开时,系统会在没有用户操作的情况下关闭。

例子

使用以下代码,可以快速看到 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 的行为不同。

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

标签: pythonpython-3.xsubprocess

解决方案


我的理解是当你communicate()input参数调用时,调用会 close stdin,从而终止xfoil.exe进程。尝试以下操作而不是调用communicate()

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

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

更新

如果您希望 xfoil 项目在脚本结束后继续,请查看 pexpect。


推荐阅读