为什么Python程序无法访问远程路径?

时间:2019-07-01 15:38:06

标签: python python-3.6

我已经编写了几个函数来获取最新文件。该代码似乎正常运行,仅此而已,而不是从目标路径列出文件,而是从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):

并从程序中删除变量“文件”和“路径”,我得到以下错误:

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 个答案:

答案 0 :(得分:2)

尽管您将path定义为'/tmp/',但实际上并没有在任何地方使用该值,因为在这里:

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

您什么都不会传递给newest_file(),这意味着它默认为.,这是由您的默认kwarg指定的,该kwarg是并且应该是执行的当前目录。

当您尝试:

def newest_file(path):

那失败了,因为再次,您没有将任何内容传递给newest_file(),现在它是一个位置arg而不是kwarg,这是必需的。