【发布时间】:2017-12-08 21:55:40
【问题描述】:
我正在尝试将一些文件从一个目录复制到另一个目录。我希望一个目录中的所有文件都位于另一个目录的根目录中。
当我在终端中运行它时,这个命令完全符合我的要求:
cp -rv ./src/CopyPasteIntoBuildDir/* ./build-root/src/
然而,这行 python 复制了大部分文件,就像上面的命令一样,但是它使一些新文件为空。具体来说,子目录中的文件是空的。
subprocess.check_call("cp -rv ./src/CopyPasteIntoBuildDir/* ./build-root/src/", shell=True)
如果文件不存在则创建文件,如果存在则截断它们。
发生了什么事?
【问题讨论】:
-
我敢打赌 shell 参数扩展是罪魁祸首,你试过:
subprocess.check_call(["cp", "-rv", "./src/CopyPasteIntoBuildDir/*", "./build-root/src/"])吗?另外,您知道shutil模块,对吗? -
@zwer 那行不通。很确定这是因为
*。 Shutil 似乎没有“复制此文件夹中的所有内容并将其转储到另一个文件夹中”的功能:( 必须os.walk我通过,我只是没有重新实现cp那样。跨度> -
os.system("cp -rv ./src/CopyPasteIntoBuildDir/* ./build-root/src/")结果相同;将子目录中的文件留空。 -
Python用的是sh,我用的是bash;也许这就是罪魁祸首?
-
shutil.copytree()复制整个树,不需要os.walk()。
标签: python macos subprocess