python - IOError: [Errno 2] - 权限会导致使用open()时出现IOError Errno 2吗

2 投票
1 回答
1029 浏览
提问于 2025-04-18 16:34

我有一个Python脚本,它会创建一个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)

这个tar文件是用tarfile.open()创建的。如果我用我的用户来运行,它是成功的,但当通过cron运行时就出错了。我在想,运行cron的用户可能没有创建tar文件的权限,这样会不会导致出现Errno 2的错误呢?

我会做一些关于用户权限的测试,看看是不是这样,但也许有其他人能更快给出答案?

谢谢!

1 个回答

2

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

import os
print(os.getcwd())

如果真的是这个问题,那就把所有的路径改成绝对路径:

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

或者在运行脚本之前先切换到正确的目录。(可以在Python脚本里或者在定时任务的设置里做这个)

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

撰写回答