gpt4 book ai didi

python - 在 Python 中重定向 FORTRAN(通过 F2PY 调用)输出

转载 作者:太空狗 更新时间:2023-10-29 17:41:03 26 4
gpt4 key购买 nike

我正在尝试找出如何重定向某些 FORTRAN 代码的输出,我已使用 F2PY 为其生成了 Python 接口(interface)。我试过:

from fortran_code import fortran_function
stdout_holder = sys.stdout
stderr_holder = sys.stderr
sys.stdout = file("/dev/null","w")
fortran_function()
sys.stdout.close()
sys.stderr.close()
sys.stdout = stdout_holder
sys.stderr = stderr_holder

这是在 Python 中重定向输出的实际方法,但在这种情况下似乎不起作用(即无论如何都会显示输出)。

我确实找到了 a mailing list post from 2002说“可以从 pts 设备读取消息,例如 ttysnoop 就是这样做的”。关于 ttysnoop 的信息似乎很难在网上找到(我认为它已经有好几年没有更新了;例如,the first result on Google for "ttysnoop" 只有指向压缩包、RPM 和 .deb 的死链接),而this request for a port to OS X收到响应“不走运,它需要一些我无法创建的特定于 Linux 的 utmp 函数。”

我愿意接受有关如何重定向输出的任何建议(它不必使用 ttysnoop)。

谢谢!

最佳答案

stdin 和 stdout fds 被 C 共享库继承。

from fortran_code import fortran_function
import os

print "will run fortran function!"

# open 2 fds
null_fds = [os.open(os.devnull, os.O_RDWR) for x in xrange(2)]
# save the current file descriptors to a tuple
save = os.dup(1), os.dup(2)
# put /dev/null fds on 1 and 2
os.dup2(null_fds[0], 1)
os.dup2(null_fds[1], 2)

# *** run the function ***
fortran_function()

# restore file descriptors so I can print the results
os.dup2(save[0], 1)
os.dup2(save[1], 2)
# close the temporary fds
os.close(null_fds[0])
os.close(null_fds[1])

print "done!"

关于python - 在 Python 中重定向 FORTRAN(通过 F2PY 调用)输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/977840/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com