我正在使用的一个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
是正确的测试文件,或者是运行循环所需的时间是使移动成功的原因。如果有什么见解或更好的想法来实现,欢迎大家提出。
你可以使用subprocess.call()来调用一个命令行操作来实现你想要的东西。在子进程完成之前,它不会返回,这意味着你的文件已经移动了。
在Linux上:
import subprocess
for a_file in list_of_filenames:
src = os.path.join(src_dir, a_file)
dest = os.path.join(dest_dir, a_file)
subprocess.call('mv ' + src + ' ' + dest)
在windows上:
import subprocess
for a_file in list_of_filenames:
src = os.path.join(src_dir, a_file)
dest = os.path.join(dest_dir, a_file)
subprocess.call('move ' + src + ' ' + dest, shell=True)