使用cron作业时,Python os.path.join()无法正确连接

时间:2017-09-27 18:50:25

标签: python logging cron raspbian raspberry-pi3

我在/home/pi/update_rrd_data.py上有一个python脚本,它应该将日志存储在/ home / pi / logs_rrd文件夹中。

这就是我实施它的方式:

current_folder = os.path.dirname(os.path.abspath(inspect.stack()[0][1]))
log_folder = os.path.join(current_folder, 'logs_rrd')
if not os.path.exists(log_folder): os.makedirs(log_folder)

file_name = __file__[:-3]  + '_' + datetime.strftime(datetime.now(), '%Y%m%d%H%M') + '.log'
log_file = os.path.join(log_folder, file_name)

logging.basicConfig(filename=log_file, level=logging.DEBUG, format='%(asctime)s:%(levelname)s:%(filename)s->%(funcName)s:%(message)s', datefmt='%m/%d/%Y_%I:%M:%S_%p')
logging.info('\nCurrent Folder: {}\nLog Folder: {}\nLog File: {}'.format(current_folder, log_folder, log_file))

当我手动运行脚本时,它运行正常,这是我在日志文件/home/pi/logs_rrd/update_rrd_data_201709271426.log中获得的内容:
当前文件夹:/ home / pi
日志文件夹:/ home / pi / logs_rrd
日志文件:/home/pi/logs_rrd/update_rrd_data_201709271426.log

但是,当我将其作为cron作业运行时,日志文件将创建在与脚本相同的文件夹中,而不是logs_rrd文件夹中。这是我在日志文件/home/pi/update_rrd_data_201709271445.log中获得的内容:
当前文件夹:/ home / pi
日志文件夹:/ home / pi / logs_rrd
日志文件:/home/pi/update_rrd_data_201709271445.log

我无法弄清楚为什么日志文件夹值正常,但日志文件会删除日志文件夹的logs_rrd部分。

这就是我运行cron的方式:

*/5 * * * * /usr/bin/python /home/pi/update_rrd_data.py

所有文件夹和文件都归root所有,因此不应该有任何写入权限问题。

1 个答案:

答案 0 :(得分:1)

如果它不起作用,DoCmd.RunSQL ("SELECT informationTable.userID, ConcatRelated('itemsold','[informationTable]','userID= ' & Chr(34) & [userID] & Chr(34) & ') AS NameOfItemSold Into CRInformationTable FROM informationTable GROUP BY informationTable.userID;") 可能是绝对路径,所以

__file__

无效,(它返回log_file = os.path.join(log_folder, file_name) )并保留原始脚本目录。

而不是file_name,只需:

__file__[:-3]

在所有情况下摆脱扩展(在某些情况下可能不是os.path.basename(os.path.splitext(__file__)[0]) BTW)脚本文件路径,所以下一个.py命令工作正常。

使用os.path.joinpathlib对象的替代解决方案(需要Python 3):

Path

删除目录&文件扩展名相同的结果。