【问题标题】:How can i call robocopy within a python script to bulk copy multiple folders?如何在 python 脚本中调用 robocopy 来批量复制多个文件夹?
【发布时间】:2012-10-21 03:07:49
【问题描述】:

我正在尝试在网络驱动器之间移动多个大文件夹(> 10 Gb、> 100 个子文件夹、> 2000 个文件)。我曾尝试在 python 中使用 shutil.copytree 命令,它工作正常,只是由于不同的原因它无法复制一小部分(

我相信 robocopy 对我来说是最好的选择,因为我可以创建一个记录传输过程的日志文件。但是,由于我需要复制 > 1000 个文件夹,因此手动工作是不可能的。

所以我的问题本质上是如何从 python 脚本中调用 robocopy(即命令行),确保日志文件写入外部文件。

我在 Windows 7 环境中工作,由于组织限制,Linux/Unix 是不可能的。如果有人有任何其他建议可以灵活地批量复制这么多文件夹,欢迎提出。

【问题讨论】:

    标签: python windows-7 command-line copy robocopy


    【解决方案1】:
    cmd = 'robocopy.exe {0} {1} /S'.format(srcDir, destPath)
    output = subprocess.run(cmd.split(), capture_output=True, text=True)
    print(output.stdout)
    

    上面的sn-p就可以了。

    注意:如果srcDirdestPath 中有空格,那么cmd.split() 将不起作用。相反,您需要执行以下操作:

    output = subprocess.run(['robocopy.exe',
                             r'<full src path>',
                             r'<full dest path>',
                             '/S'],
                            capture_output=True,
                            text=True)
    print(output.stdout)
    

    您可以在此处阅读有关子流程的所有信息:https://docs.python.org/3.7/library/subprocess.html

    【讨论】:

      【解决方案2】:

      这让我走上了正确的道路,但我不得不用逗号分隔选项,例如

      from subprocess import call
      call(["robocopy", "./", "newfolder/test02", "/S", "/LOG:mylogfile"])
      

      这是一种享受。 “/S”复制了所有子文件夹。

      【讨论】:

        【解决方案3】:

        就像 halfs13 所说的使用子流程,但您可能需要像这样格式化它

        from subprocess import call call(["robocopy",'fromdir', 'todir',"/S"]) 否则它可能会将源代码读取为一切

        【讨论】:

          【解决方案4】:

          Subproccess 允许您进行系统调用。这将允许您像从命令行一样调用 robocopy。

          from subprocess import call
          call(["robocopy", "basefolder newfolder /S /LOG:mylogfile"])
          

          【讨论】:

            【解决方案5】:

            使用os.exec 系列函数之一来启动任何外部程序:

            可能你想要os.execlp(file, arg0, arg1, ...)

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2020-10-04
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多