无法移动文件python

时间:2018-07-25 21:08:09

标签: python mv python-watchdog

以前有一些类似的解决方案,但似乎没有一个对我有用。

代码:

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 = ', ['sample.tsv'])

,但是mv命令给出此错误: mv: cannot stat 'sample.tsv': No such file or directory

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

谢谢!

1 个答案:

答案 0 :(得分:1)

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