linux上的python无法在函数内找到文件

时间:2018-03-13 11:12:42

标签: python python-2.7 io

我正在linux上的python 2.7.12上编写一个脚本,其中包含一系列运行外部程序的函数......

在某些时候,我有一个运行程序的函数,它生成一个外部文件。该函数的下一步是读取外部文件并进行一些处理。

功能是

def RunProgram(input, options)
input_file=str(input)
options=str(options)
cmd=str('program + ' input_file + '--flag ' + options + ' --out temp.log &> /dev/null')
#print(cmd)
#print(cmd)
os.system(cmd)
with open('path_to_file/temp.log') as fp:
    for i, line in enumerate(fp):
        if i == 2:
            #print(line)
            solution=str(line) #stores 3rd line of log file
        elif i > 2:
            break
return solution

不知何故,虽然外部程序运行并且我看到从bash shell创建的temp.log,但该函数退出时出现错误

IOError: [Errno 2] No such file or directory: 'path_to_file/temp.log'

如果在os.system(cmd)之后的函数中,我放置

print(os.path.exists('path_to_file/temp.log'))
print(os.path.isfile('path_to_file/temp.log'))

我得到2假,但是如果我在运行该函数后运行这些命令并获得错误,那么两者都会得到True,并且我使用ls在目录中看到该文件。

一旦我已经存在temp.log再次运行该函数,该函数就可以运行。

我已经检查过os.getcwd()并且会话正在正确的目录中运行。我还检查了我对temp.log的读权限

..任何想法?

1 个答案:

答案 0 :(得分:0)

这可能是竞争条件:当您的代码想要读取文件的输出时,程序尚未完成,输出文件尚不存在。尝试使用“sleep”循环,等待您想要读取的文件可用。另一种可能是文件权限不匹配。