我正在尝试用Python运行AVL(Athena Vortex Lattice)。它是一个在单独的终端窗口上运行的软件,与XFOIL完全相同。用户编写命令并按enter键执行
我正在使用subprocess
模块运行软件,终端窗口将按预期打开。但是,我无法让Python程序在打开的窗口中写入命令。我没有得到任何错误,但是AVL没有写入任何内容,并且它保持在初始状态
我试图写入AVL的命令是LOAD
,后跟输入文件的绝对路径
这是我第一次使用子流程模块,所以我可能只是忘记了某个重要的选项。我正在macOS上用Python3.9运行这个程序
有什么不对劲吗
import os.path
import subprocess as sp
AVL_FOLDER_PATH = '~/Desktop/AVL_VLM'
AVL_EXE_NAME = 'avl335'
avl_path = os.path.join(AVL_FOLDER_PATH, AVL_EXE_NAME)
avl_open_cmd = 'open ' + avl_path
avl_ps = sp.Popen([avl_open_cmd], stdin=sp.PIPE, stdout=None, stderr=None, shell=True)
def avl_command(cmd):
cmd += '\n'
cmd = cmd.encode('ascii')
avl_ps.stdin.write(cmd)
avl_command('LOAD')
avl_command('/Users/vianneydubois/Desktop/AVL_VLM/test_gen.avl')
默认情况下,输入/输出是缓冲的(https://docs.python.org/3/library/subprocess.html#subprocess.Popen)
您可以在
Popen
中设置bufsize=0
:(https://docs.python.org/3/library/subprocess.html#subprocess.Popen)
或者,您可以在写入后手动刷新缓冲区:
这真的是你想要的吗
或者你的意思是:
相关问题 更多 >
编程相关推荐