0

之前已经给出了一些类似的解决方案,但似乎没有一个对我有用。

代码:

def watch_dir(self, prefix, dest):
    before = dict([(f, None) for f in os.listdir(self.data_dir)])
    while 1:
        time.sleep(5)
        after = dict([(f, None) for f in os.listdir(self.data_dir)])
        new_files = [f for f in after if not f in before and f.startswith(prefix)]
        before = new_files
        for f in new_files:
            os.system('mv {f} {dest}'.format(f=f, dest=dest))

当我打印 new_files 我得到 ->('new_files = ', ['sample.tsv'])

mv命令给出了这个错误: mv: cannot stat 'sample.tsv': No such file or directory

有人可以帮我理解这里可能出了什么问题吗?!

谢谢!

4

1 回答 1

1
  1. 永远不要使用os.system- 要在 python 中运行子进程,请使用subprocess模块。
  2. 在这种情况下,即使使用subprocess太多,因为您想移动文件,因此您可以使用shutil.move()来执行相同操作而无需调用单独的进程。
  3. os.listdir仅返回没有路径的文件名,因此您必须自己添加才能找到该文件:os.path.join(self.datadir, f)
  4. 要有效地监视目录/文件而不每 5 秒检查一次,您可以使用pyinotify模块 - 它使用高效的系统 api 来监视目录并在它更改时调用您的函数,不涉及轮询。
于 2018-07-25T21:17:37.077 回答