【问题标题】:Read creation file date from other users home folders with Python2.7 centOS使用 Python2.7 centOS 从其他用户主文件夹中读取创建文件日期
【发布时间】:2017-04-27 08:30:49
【问题描述】:

我正在编写一个脚本,该脚本将通过查看文件创建日期来检查何时进行了最新备份。

这些文件位于不同用户主文件夹中的 centOS7 机器上。

我很确定这与特权有关,但到目前为止我尝试过的一切都失败了。

这是我的代码

#!/usr/bin/env python2.7

import os
import time
import glob
from datetime import date, datetime

date_format = "%m/%d/%Y"

def checkBackup (location, fileName, interval):
    newest = max(glob.iglob(fileName), key=os.path.getctime)
    created = time.strftime('%D', time.localtime(int(os.path.getctime(location+newest))))
    cDate = datetime.strptime(created[:6] + '20' + created[6:], date_format)
    localTime = time.strftime('%D')
    cTime = datetime.strptime(localTime[:6] + '20' + localTime[6:], date_format)
    delta = cTime-cDate

    if delta.days > interval:
            file.write("Missing backup for " + newest + "    ERROR!\n")
    else:
            file.write(newest + " SUCCESSFUL BACKUP\n")
            return;

file = open("backupStatus.txt","w")
checkBackup("/home/user1/","backupFile.gz",30);
checkBackup("/home/user2/","backupFile.gz",30);
file.close()

当以 user1 身份运行此脚本时,我在 backupStatus.txt 文件中获得了一个新条目,但是当尝试检查 user2 的主文件夹中文件的状态时,我得到了错误:

Traceback (most recent call last):
File "checkBackup.py", line 26, in <module>
checkBackup("/home/user2/","backupFile.gz",30);
File "checkBackup.py", line 11, in checkBackup
newest = max(glob.iglob(fileName), key=os.path.getctime)
ValueError: max() arg is an empty sequence

我已将 user1 添加到 user2 组,并认为这可以解决问题,但我仍然收到此错误,即使以 root 身份运行我也收到此错误。

这是我在 stackoverflow 中的第一篇文章,所以我希望我以正确的方式编写了这个问题。自从我用 python 做任何事情以来也有几年了,所以请随时给我一些关于如何改进代码的提示!

那么,有人知道我该如何解决这个问题吗?

问候

安东

【问题讨论】:

  • arg is an empty sequence 表示glob.iglob() 没有返回文件,因此文件不存在。您的问题可能是您没有在文件名中包含位置(使用os.path.join)。此外,os.is_file 之类的内容可能比使用 glob 更合适。
  • 嗨 @cdarke 我在 user2 /home 中创建了 4 个新文件,所有文件都以 test 开头,并像 checkBackup("/home/user2/","test*",30); 这样调用函数,但我仍然遇到同样的错误。
  • checkBackup 的glob 中,使用:location + fileName,你没有将目录添加到文件名中,所以它只是在你当前的目录中查找。
  • @cdarke 我像你说的那样将位置添加到文件中,还尝试在将其放入 glob 之前将其添加到新变量中,甚至尝试像这样对 glob 的路径进行硬编码newest = max(glob.iglob("/home/newUser/test1.txt"), key=os.path.getctime) 但我我仍然得到同样的错误。我将阅读一些关于os.path.joinos.is_file 的内容,看看是否可以解决问题
  • 对我有用,但前提是文件存在。问题是你只能从iglob() 获得一个文件名的最大值,因为它不是一种模式,那么你为什么要使用max()

标签: python centos7 glob


【解决方案1】:

以下代码有效。 它之前不起作用的原因是因为我只有 glob 检查文件名而不是正确的路径,所以它只适用于同一目录中的文件。

在@cdarke 的帮助下,我将文件路径添加到了 glob,并且可以成功地从其他用户 /home 文件夹中获取信息,但之后下一行的路径不正确(将路径两次添加到字符串中),通过删除一切按预期工作。

#!/usr/bin/env python2.7

import os
import time
import glob
from datetime import date, datetime

date_format = "%m/%d/%Y"

def checkBackup (location, fileName, interval):
    newest = max(glob.iglob(location + fileName), key=os.path.getctime)
    created = time.strftime('%D', time.localtime(int(os.path.getctime(newest))))
    cDate = datetime.strptime(created[:6] + '20' + created[6:], date_format)
    localTime = time.strftime('%D')
    cTime = datetime.strptime(localTime[:6] + '20' + localTime[6:], date_format)
    delta = cTime-cDate

    if delta.days > interval:
            file.write("Missing backup for " + newest + "    ERROR!\n")
    else:
            return;

file = open("backupStatus.txt","w")
checkBackup("/home/user1/","backupFile.gz",30);
checkBackup("/home/user2/","backupFile.gz",30);
file.close()

【讨论】:

    猜你喜欢
    • 2021-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多