почему удаленный путь не доступен программе python? - PullRequest
0 голосов
/ 01 июля 2019

Я написал пару функций, чтобы получить последний файл. Кажется, что код работает правильно, только вместо того, чтобы перечислять файлы из целевого пути, он перечисляет файлы из того места, где находится программа python. Ниже приведен код:

import os
import platform

path = '/tmp/'

def newest_file(path='.'):
    files = os.listdir(path)
    paths = [os.path.join(path, basename) for basename in files]
    if platform.system() == 'Windows':
        return max(paths, key=os.path.getctime)
    else:
        return max(paths, key=os.path.getmtime)

def stamp(newest_file):
    file_stamp = os.path.getmtime(newest_file)
    return file_stamp, newest_file

def file_compare(file_stamp, file_name):
    try:
        with open(f'{path}stamp.txt') as f:
            old_stamp = float(f.read())
        if old_stamp == file_stamp:
            print(f'No change: {file_name} --> {file_stamp}')
        else:
            print(f'New file: {file_name} --> {file_stamp}')
            logger.info(f'{file_name} --> {file_stamp}')
            with open(f'{path}stamp.txt', 'w') as f:
                f.write(str(file_stamp))
    except OSError:
        with open(f'{path}stamp.txt', 'w') as f:
            f.write(str(file_stamp))

if __name__ == '__main__':
    newest_file = newest_file()
    file_stamp = stamp(newest_file)[0]
    file_name = os.path.basename(stamp(newest_file)[1])
    file_compare(file_stamp, file_name)

Таким образом, вместо того, чтобы перечислять файлы из '/ tmp', он перечисляет файлы из '/ opt', там, где находится мой код на python. Если я использую

`path = glob.iglob('/tmp/*.txt')` 

и просто используйте

def newest_file(path):

И удалив переменные 'files' и 'paths' из программы, я получаю следующее сообщение об ошибке:

Traceback (most recent call last):
  File "new_x20.py", line 45, in <module>
    newest_file = newest_file()
TypeError: newest_file() missing 1 required positional argument: 'path'

Я почесал голову, но не смог выяснить проблему. Пожалуйста, помогите мне найти мою ошибку

Спасибо

1 Ответ

2 голосов
/ 01 июля 2019

Хотя вы определяете path как '/tmp/', вы фактически нигде не используете это значение, потому что здесь:

if __name__ == '__main__':
    newest_file = newest_file()

Вы ничего не передаете newest_file(), что означает, что по умолчанию он равен ., как указано в kwarg по умолчанию, который является и должен быть текущим каталогом выполнения.

А когда ты попробовал:

def newest_file(path):

Это не удалось, потому что опять вы ничего не передаете newest_file(), и теперь, когда это позиционный аргумент вместо kwarg, требуется.

...