【问题标题】:Grabbing the output of MAPLE via Python通过 Python 获取 MAPLE 的输出
【发布时间】:2010-01-12 23:25:46
【问题描述】:

如何使用 Python 中的 subprocess 模块来启动 MAPLE 的命令行实例来提供输出并将输出返回给主代码?例如我想:

X = '1+1;'
print MAPLE(X)

返回“2”的值。

我见过的最好的是围绕 MAPLE 命令的 SAGE 包装器,但我不想安装和使用 SAGE 的开销来实现我的目的。

【问题讨论】:

  • 您能描述一下 Maple 命令行界面的工作方式吗?它是像 Python 一样的标准读取-评估-打印循环,还是可以使用 -c "command" 开关让它立即评估命令的结果?
  • 如果是这个过程会很简单,MAPLE 确实有一个 -c "command" 开关,但该过程不会退出(它运行交互模式)。理想情况下,我想让管道保持打开状态 - 即在 MAPLE 中计算,然后 python 然后再次回到 MAPLE 而无需每次启动 MAPLE,因为它启动时加载时间很长。

标签: python subprocess pexpect maple


【解决方案1】:

试图以“交互方式”驱动子进程往往会遇到子进程做一些缓冲的问题,这会阻塞一些事情。

这就是为什么我建议使用pexpect(Windows 除外:Windows 上的wexpect),这正是为此目的而设计的——让您的程序模拟(从子进程的角度)人类用户键入输入/命令并在终端/控制台查看结果。

【讨论】:

    【解决方案2】:

    使用 Alex Martelli 的提示(谢谢!),我想出了一个明确的答案来回答我的问题。在这里发帖希望其他人可能会觉得有用:

    import pexpect
    MW = "/usr/local/maple12/bin/maple -tu"
    X = '1+1;'
    child = pexpect.spawn(MW)
    child.expect('#--')
    child.sendline(X)
    child.expect('#--')
    out = child.before
    out = out[out.find(';')+1:].strip()
    out = ''.join(out.split('\r\n'))
    print out
    

    需要解析输出,因为 MAPLE 认为有必要将长输出分解为多行。这种方法的优点是保持与 MAPLE 的连接以供将来计算。

    【讨论】:

      【解决方案3】:

      这是一个如何使用命令行程序进行交互式 IO 的示例。我使用类似的东西来构建基于ispell 命令行实用程序的拼写检查器:

      f = popen2.Popen3("ispell -a")
      f.fromchild.readline() #skip the credit line
      
      for word in words:
          f.tochild.write(word+'\n') #send a word to ispell
          f.tochild.flush()
      
          line = f.fromchild.readline() #get the result line
          f.fromchild.readline() #skip the empty line after the result
      
          #do something useful with the output:
          status = parse_status(line)
          suggestions = parse_suggestions(line)
          #etc..
      

      唯一的问题是它非常脆弱,而且是一个反复试验的过程,以确保您没有发送任何错误的输入并处理程序可能产生的所有不同输出。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-02-17
        • 1970-01-01
        相关资源
        最近更新 更多