我正在通过 f2py 在 python 中使用一些 fortran 代码。我想将 fortran 输出重定向到我可以使用的变量。我发现这个问题很有帮助。 在 Python 中重定向 FORTRAN(通过 F2PY 调用)输出
但是,我还想选择将 fortran 代码写入终端并进行记录。这可能吗?
我有以下愚蠢的课程,我从上面的问题和http://websrv.cs.umt.edu/isis/index.php/F2py_example拼凑而成 。
class captureTTY:
'''
Class to capture the terminal content. It is necessary when you want to
grab the output from a module created using f2py.
'''
def __init__(self, tmpFile = '/tmp/out.tmp.dat'):
'''
Set everything up
'''
self.tmpFile = tmpFile
self.ttyData = []
self.outfile = False
self.save = False
def start(self):
'''
Start grabbing TTY data.
'''
# open outputfile
self.outfile = os.open(self.tmpFile, os.O_RDWR|os.O_CREAT)
# save the current file descriptor
self.save = os.dup(1)
# put outfile on 1
os.dup2(self.outfile, 1)
return
def stop(self):
'''
Stop recording TTY data
'''
if not self.save:
# Probably not started
return
# restore the standard output file descriptor
os.dup2(self.save, 1)
# parse temporary file
self.ttyData = open(self.tmpFile, ).readlines()
# close the output file
os.close(self.outfile)
# delete temporary file
os.remove(self.tmpFile)
我的代码目前看起来像这样:
from fortranModule import fortFunction
grabber = captureTTY()
grabber.start()
fortFunction()
grabber.stop()
我的想法是有一个名为静默的标志,我可以用它来检查我是否允许显示 fortran 输出。然后在我构建它时将其传递给 captureTTY,即
from fortranModule import fortFunction
silent = False
grabber = captureTTY(silent)
grabber.start()
fortFunction()
grabber.stop()
我不太确定如何实现这一点。显而易见的事情是:
from fortranModule import fortFunction
silent = False
grabber = captureTTY()
grabber.start()
fortFunction()
grabber.stop()
if not silent:
for i in grabber.ttyData:
print i
我不是这个的忠实拥护者,因为我的 fortran 方法需要很长时间才能运行,很高兴看到它实时更新,而不仅仅是在最后。
有任何想法吗?代码将在 Linux 和 Mac 机器上运行,而不是 Windows。我浏览了网络,但没有找到解决方案。如果有的话,我相信它会非常明显!
干杯,
G
澄清:
从评论中我意识到上述并不是最清楚的。我目前拥有的是记录 fortran 方法的输出的能力。但是,这会阻止它打印到屏幕上。我可以将它打印到屏幕上,但无法记录它。我希望可以选择同时执行这两项操作,即记录输出并将其实时打印到屏幕上。
顺便说一句,fortran 代码是一种拟合算法,我感兴趣的实际输出是每次迭代的参数。