首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何转换subprocess.call(["cp","-r",...])在Windows 10上工作?

如何转换subprocess.call(["cp","-r",...])在Windows 10上工作?
EN

Stack Overflow用户
提问于 2019-01-11 01:13:55
回答 2查看 111关注 0票数 0

我的目标是使用另一个研究人员给我的代码。我在Windows10上使用Python3.7,我假设代码是为Python2和Linux OS编写的。

我需要将一些旧的Python2命令转换为我的新3.7版本。我不能使用其他Python版本,也不能更改我的操作系统。我已经开始了这项工作,一些翻译是相当明显的,但我需要你的帮助。

旧的命令是:

代码语言:javascript
复制
subprocess.call(["cp", "-r", WD + "Albedo", WD + "CIE_data",
                 WD + "Gases", WD + "Solar", ProcessDir[ProcessNumber]])

WDProcessDir[ProcessNumber]都是文件路径。

我需要一个适用于Windows3.7的新命令。我假设"cp -r"等同于Windows命令xcopy,但我的问题是:WD + "Albedo"+ "CIE_data"等。如何使用subprocess.call在一个命令中xcopy多个文件

EN

回答 2

Stack Overflow用户

发布于 2019-01-11 01:27:21

坦率地说,当Python的shutil模块为您提供了一种独立于操作系统的复制目录树的方法时,就没有理由使用任何操作系统提供的工具来实现这一点。因此:

代码语言:javascript
复制
import shutil, os.path

for subdir in ['Albedo' 'CIE_data' 'Gases', 'Solar']:
  shutil.copytree(os.path.join(WD, subdir),
                  os.path.join(ProcessDir[ProcessNumber], subdir))
票数 2
EN

Stack Overflow用户

发布于 2019-01-11 01:32:08

我强烈建议不要复制这样的文件。正如您在当前情况下看到的那样,不能保证在不同的计算机上使用相同的程序。另一方面,您可以使用Python,它具有您可能需要的所有跨平台文件复制实用程序。

对于一般的文件操作,shutil模块是最好的选择。特别是,shutil.copytree几乎完全符合您的要求。唯一的区别是目标可能还不存在,并且您必须一次复制一个源文件夹。

另一点是,您通常不希望将可能包含或不包含尾随斜杠的路径与+连接在一起。请改用os.join。它不仅会处理这些差异,还会确保它插入的路径分隔符对于您的操作系统是正确的。

总而言之,您拥有:

代码语言:javascript
复制
from shutil import copytree
from os.path import join

for folder in ('Albedo', 'CIE Data', 'Gasses', 'Solar'):
    copytree(join(WD, folder), join(ProcessDir[ProcessNumber], folder))

如果在此过程中出现问题,您可能需要使用shutil.rmtree预先清理输出。调用copytree之前,请执行以下操作

代码语言:javascript
复制
rmtree(join(ProcessDir[ProcessNumber], folder), ignore_errors=True)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54133753

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档