我有一个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用户可以提供更快的答案?
谢谢!
答案 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')