如何使用子进程模块从python脚本运行AVL(二进制)?

时间:2017-01-16 17:56:22

标签: python python-3.x subprocess

我正在尝试编写AVL (Athena Vortex Lattice)中的一系列曲目,这是一个用于设计机翼和其他升力曲面的涡旋格子代码。

我将二进制文件存储在〜/ bin /中。通常,您在终端中运行AVL,然后输入命令。典型的命令是:

  1. LOAD~ / path / avlexamplefile.avl
  2. OPER
  3. A A 5
  4. X
  5. FS
  6. RETURN
  7. QUIT
  8. 其中,加载.avl输入文件,进入操作菜单,将攻角设置为5度,执行计算,将力打印到输出文件,退出操作菜单,退出程序。 / p>

    我正在尝试使用以下代码使用子进程模块从python脚本运行AVL:

        import subprocess as sp
        avl = sp.Popen(['~/bin/avl3.35'],
               stdin=sp.PIPE,stdout=None, 
               stderr=None, 
               universal_newlines=True)
    
        avl.communicate('LOAD ~/file/avlexamplefile.avl')
    

    这几乎可行。 AVL加载,第一个命令被执行,但后来我得到以下错误,并且不会接受任何进一步的命令。

        AVL   c>  forrtl: severe (24): end-of-file during read, unit -4, file        stdin
        Image              PC                Routine            Line        Source             
        avl3.35            000000010A00F43B  Unknown               Unknown  Unknown
        avl3.35            000000010A00DBFE  Unknown               Unknown  Unknown
        avl3.35            0000000109FD5177  Unknown               Unknown  Unknown
        avl3.35            0000000109F8B426  Unknown               Unknown  Unknown
        avl3.35            0000000109F8AA39  Unknown               Unknown  Unknown
        avl3.35            0000000109FB61F3  Unknown               Unknown  Unknown
        avl3.35            0000000109EEECF3  Unknown               Unknown  Unknown
        avl3.35            0000000109E7130F  Unknown               Unknown  Unknown
        avl3.35            0000000109E6FC7C  Unknown               Unknown  Unknown
        libdyld.dylib      00007FFF8B1D95AD  Unknown               Unknown  Unknown
    

    有谁可以指出我做错了什么?最后,我想将上面的内容置于for循环中以运行多个变体。

1 个答案:

答案 0 :(得分:0)

尝试使用avl.stdin.write("your cmd here" +'\n')

使用xfoil的工作示例在这里(不是我的):

https://github.com/Launchpad-McQ/Aileron-design/blob/master/design-aileron.py