与FORTRAN Shell程序进行交互通信

问题描述

DAOPHOT是FORTRAN编写的软件,用于在图像中执行天文学任务。其用法的典型流程是:

  1. 打开一个终端(在我的情况下为gnome-terminal)并运行./daophot。我现在在DAOPHOT的壳中。
  2. 提示用户输入命令,例如ATTACH,以输入图像文件。 DAOPHOT运行并再次提示用户更多命令。
  3. 用户给出另一个命令,例如PHOTOMETRY。 DAOPHOT运行并再次提示用户。

对于用户给出的每个命令,DAOPHOT运行并一次又一次提示,直到键入exit。就我而言,我有三个特定的命令可以连续运行,而不会发生变化(ATTACHPHOTOMETRYPSF,后者可能运行不止一次)。

现在,我只是在尝试ATTACH一个文件。我尝试过的:

使用subprocess,如{/ {3}}和here所问:

import subprocess

p = subprocess.Popen(["gnome-terminal","--disable-factory","--","./daophot"],stdin=subprocess.PIPE,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
p.stdin.write(input("ATTACH file.fits"))

在这种情况下,DAOPHOT的外壳打开,但是不执行ATTACH命令。我关闭外壳,字符串“ ATTACH file.fits”出现在IPython终端中,结束了子进程。我也尝试过使用p.communicate(input=input("ATTACH file.fits")),但是得到了相同的结果。

使用pexpect,如{/ {3}}和here所问:

import pexpect

p = pexpect.spawn("gnome-terminal --disable factory -- ./daophot")
p.expect(pexpect.EOF)
p.sendline("ATTACH file.fits")

在这种情况下,DAOPHOT的外壳会打开,但是ATTACH命令不会算作输入。

最后,DAOPHOT包装器已经here,但是我们的想法是在我们的实验室中使用此自动和交互式Python版本,以便以后可以根据需要进行更改。

根据我对管道的理解,./daophotgnome-terminal内部运行的子子流程,因此当我使用例如p.stdin.write(input("ATTACH file.fits")实际上是将此命令输入gnome-terminal,而不是./daophot

非常感谢您的帮助。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...