我如何转换一个子流程调用([“cp”,“r”,…])在Windows 10上工作?

2024-09-29 21:58:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我的目标是使用另一位研究人员给我的代码。我使用的是Windows10上的Python3.7。我假设代码是为python2和Linux操作系统编写的。你知道吗

我需要将一些旧的python2命令翻译成新的3.7版本。我不能使用另一个Python版本,也不能更改我的操作系统。我已经开始工作了,有些翻译很明显,但我需要你的帮助。你知道吗

旧命令是:

subprocess.call(["cp", "-r", WD + "Albedo", WD + "CIE_data",
                 WD + "Gases", WD + "Solar", ProcessDir[ProcessNumber]])

WDProcessDir[ProcessNumber]都是文件路径。你知道吗

我需要一个新的命令为Python3.7窗口10。我假设"cp -r"等同于Windows命令xcopy,但我的问题是:WD + "Albedo"+ "CIE_data",等等。如何使用subprocess.call在一个命令中xcopy多个文件?你知道吗


Tags: 文件代码命令版本datacallcpsubprocess
2条回答

我强烈建议不要复制那样的文件。正如您在当前情况中所看到的,不能保证在不同的机器上提供相同的程序。另一方面,您有Python,它具有您可能需要的所有跨平台文件复制实用程序。你知道吗

对于一般文件操作,^{}模块是您的朋友。特别是,^{}几乎完全按照您的要求执行。唯一的区别是目标可能不存在,您必须一次复制一个源文件夹。你知道吗

另一点是,通常不希望将可能包含或不包含尾随斜杠的路径与+连接起来。改用^{}。它不仅会处理这些差异,而且会确保它插入的路径分隔符适合您的操作系统。你知道吗

你总共有:

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))

如果在此过程中出现问题,您可能需要使用^{}对输出进行预清理。在调用copytree之前

rmtree(join(ProcessDir[ProcessNumber], folder), ignore_errors=True)

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

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))

相关问题 更多 >

    热门问题