问题描述
DAOPHOT是FORTRAN编写的软件,用于在图像中执行天文学任务。其用法的典型流程是:
- 打开一个终端(在我的情况下为gnome-terminal)并运行
./daophot
。我现在在DAOPHOT的壳中。 - 提示用户输入命令,例如
ATTACH
,以输入图像文件。 DAOPHOT运行并再次提示用户更多命令。 - 用户给出另一个命令,例如
PHOTOMETRY
。 DAOPHOT运行并再次提示用户。
对于用户给出的每个命令,DAOPHOT运行并一次又一次提示,直到键入exit
。就我而言,我有三个特定的命令可以连续运行,而不会发生变化(ATTACH
,PHOTOMETRY
和PSF
,后者可能运行不止一次)。
现在,我只是在尝试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版本,以便以后可以根据需要进行更改。
根据我对管道的理解,./daophot
是gnome-terminal
内部运行的子子流程,因此当我使用例如p.stdin.write(input("ATTACH file.fits")
实际上是将此命令输入gnome-terminal
,而不是./daophot
。
非常感谢您的帮助。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)