gpt4 book ai didi

python - 如何在由python中的另一个函数创建之前读取文本文件

转载 作者:太空宇宙 更新时间:2023-11-04 10:11:24 24 4
gpt4 key购买 nike

在我的 python 代码中,我调用了一个用 FreeFem++ 编写的函数,然后我将 FreeFem++ 代码的输出保存在一个文本文件中,我想在 python 中读取它。

def f(x):
os.system("Here the FreeFem++ code will be called and the result will be saved as out.txt")
myfile=open("out.txt")
return myfile.read()

问题是,当我运行 python 代码时,由于 out.txt 尚未创建,它给我一个错误,指出 out.txt 不存在!

最佳答案

使用subprocess.run()调用您的 freefem++ 程序,并确保您的调用在文件存在之前实际生成了该文件。您可以通过在 open 之前添加一个断点来检查这一点。

所以改为子进程:

def f(x):
cp = subprocess.run(['freefem++', '--argument', '--other_argument'])
if cp.returncode != 0:
print('Oops… failure running freefem++!')
sys.exit(cp.returncode) # actually you should be raising an exception as you're in a function
if not os.path.exists('out.txt'):
print('Oops… freefem++ failed to create the file!')
sys.exit(1) # same you'd better be raising an exception as you're in a function
with open('out.txt', 'r') as ff_out:
return ff_out # it is better to return the file object so you can iterate over it

在打开文件之前检查文件是否确实已创建:

def f(x):
cp = subprocess.run(['freefem++', '--argument', '--other_argument'])
if cp.returncode != 0:
print('Oops… failure running freefem++!')
sys.exit(cp.returncode)

# XXX Here we make a breakpoint, when it's stopping open a shell and check for the file!
# if you do not find the file at this point, then your freefem++ call is buggy and your issue is not in the python code, but in the freefem++ code.
import pdb;pdb.set_trace()

with open('out.txt', 'r') as ff_out:
return ff_out # it is better to return the file object so you can iterate over it

最后,最优雅的解决方案是让 freefem++ 程序将所有内容输出到标准输出,然后使用 subprocess.popen() 通过 python 中的管道获取该输出。 :

def f(x):
p = subprocess.popen(['freefem++'…], stdout=subprocess.PIPE)
out, _ = p.communicate()
if p.returncode != 0:
raise Exception('Oops, freefem++ failed!')
return out

关于python - 如何在由python中的另一个函数创建之前读取文本文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38027726/

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