python - IOError:[Errno 2] - 使用open()时权限是否会导致IOError Errno 2

时间:2014-08-08 15:05:56

标签: python linux cron

我有一个python脚本,它创建一个tar文件,将文件移动到tar文件中,然后删除它们。

我可以手动运行脚本而不会出现问题。但是当它从cron运行时,它失败了:

IOError: [Errno 2] No such file or directory: 'directory/filename_2014-08-08.tar.gz'

在这种情况下,文件权限问题是否可能引发Errno 2?

以下是相关代码:

fname = directory + "_" + str(strftime("%Y-%m-%d_", localtime()))+".tar.gz"
tar = tarfile.open(archived_model_dir + fname.replace("/",""), "w:gz") # this line raises error
for input_file in os.listdir(directory):
    if os.path.isfile(directory + input_file):
        if not input_file.endswith('.pyc'):  
            tar.add(directory + input_file) # archive all but .pyc
        os.remove(directory + input_file)
    elif os.path.exists(directory + input_file): # delete subfolders 
        shutil.rmtree(directory + input_file)

使用tarfile.open()创建tar文件。如果我的用户运行它再次成功,但从cron运行时失败并出现上述错误。我想知道运行cron的用户是否没有适当的权限来创建tar文件,这可能会引发Errno 2吗?

我将使用用户权限进行一些测试,看看是否是这种情况,但也许某些SO用户可以提供更快的答案?

谢谢!

1 个答案:

答案 0 :(得分:2)

检查当前的工作目录。这可能是错误的原因。

import os
print(os.getcwd())

如果出现问题,请将所有路径设为绝对路径:

fname = os.path.join('/path/to/directory/', directory + "_" + .... + ".tar.gz")

或在运行脚本之前更改目录。 (在Python脚本或crontab条目中)

import os
os.chdir('/path/to/directory')