我正在使用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的行为会有所不同。
我怀疑这与特定应用程序的标准输出有关,但这是一个疯狂的猜测。希望可以对此做点什么。
答案 0 :(得分:1)
我的理解是,当您使用communicate()
参数调用input
时,该调用将关闭stdin
,从而终止 xfoil.exe 进程。请尝试以下操作,而不要致电communicate()
:
xfoil.stdin.write(actions)
xfoil.stdin.flush()
此后,过程将继续直到您退出脚本。
如果您希望xfoil项目即使在脚本结束后仍继续运行,请调查pexpect。