【发布时间】:2013-03-28 20:43:25
【问题描述】:
我正在尝试在 Python 的 shell 中执行 Fortran 程序。
我使用subprocess 调用Fortran 程序并传递参数(需要两个输入文件)。我就是这样做的:
COMMAND = '/path/to/FORTRAN/program << !\n' + INPUT_FILE1 + '\n' + INPUT_FILE2 +'\n!'
return = subprocess.call(COMMAND, shell=True)
不幸的是,Fortran 程序退出:
? FORTRAN Runtime Error:
? Attempt to read past end of file
? READ(UNIT=22,...
这不是输入文件或 Fortran 程序的问题。当我在我的 shell 中执行此操作时:
$>/path/to/FORTRAN/program << !
>INPUT_FILE1
>INPUT_FILE2
>!
一切都按预期工作(没有Attempt to read past end of file)。
我无权访问 Fortran 源代码,因此无法检查其中发生了什么。我认为这与我通过 subprocess 调用程序的方式有关 - 我只是不知道是什么。
我使用的是 Python 2.6.6。
快速解释:Fortran 程序将提示输入两个输入文件,但它不会将它们识别为命令行选项(它们不能随程序调用一起提供)。如果你想运行它——比如说一个 shell 脚本(批处理模式)——你需要捕获返回命令来执行命令,还要提供这两个文件。 << ! 打开一个“列表”,因为没有更好的术语。以下命令被传递给程序,该程序等待执行,直到输入!。
我已经多次成功地使用了这种方法(不同的 Fortran 代码),并且在这个方法中,使用了 C shell 脚本(不是 Python)。
【问题讨论】:
-
我对从终端运行 FORTRAN 知之甚少 -
<<的意义是什么?那是来自stdin还是其他地方?也许问题在于您将输入文件作为参数提交,但它期望它会解析一个缓冲区。如果没有有关该程序的更多信息,很难说。 -
我试图通过调用一个转储其标准输入的小程序来重现,并且在这种情况下命令行和
subprocess都可以工作。
标签: python subprocess