如何让我的python脚本等待shutil.move实际完成?

时间:2018-04-05 16:07:56

标签: python unix copy shutil

我正在使用的python脚本一度将文件列表从一个目录移动到另一个目录。我已使用shutil.move

实现了它
for a_file in list_of_filenames:
    src = os.path.join(src_dir, a_file)
    dest = os.path.join(dest_dir, a_file)
    shutil.move(src, dest)

之后,我立即在命名管道中编写这个文件名列表,该管道插入我的主程序(用C语言编写)。然后它继续读取这些文件,假设它们已到达目的地目录。问题是,如果我没有告诉我的python脚本在写入管道之前等待几秒钟,我的主程序就会说它存在其中一个文件。

从目前为止我的研究以及对该问题的理解有限,似乎操作系统可以通知我的脚本移动已完成,而实际上它还没有完成。

现在等待几秒钟听起来不是那么糟糕,但如果我要移动100,1000甚至10000个文件怎么办?它是否足够,还是我必须等待更长时间?在处理文件之前,我如何确保我的文件已被移动?

到目前为止我的想法是这样的:

was_moved = [False for _ in range(len(list_of_files))]
while not all(was_moved):
    for i, a_file in enumerate(files):
        if was_moved[i]:
            continue

        try:
            # try to open the file in read mode to see if it actually exists
            open_file = open(os.path.join(dest_dir, a_file), "r")
        except FileNotFoundError:
            continue

        open_file.close()
        was_moved[i] = True

这感觉就像笨拙的编程一样,我甚至不确定open是否正确地测试了文件,或者运行循环所花费的时间是什么使移动成功。任何见解或更好的想法都可以实现这一点。

1 个答案:

答案 0 :(得分:3)

您可以使用subprocess.call()调用命令行操作来完成所需的操作。在子流程完成之前,它不会返回,这意味着文件已移动:

在Linux上:

{{1}}

在Windows上:

{{2}}