Python:我应该使用shutil或subprocess来操作文件和目录作为更好的方法吗?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python:我应该使用shutil或subprocess来操作文件和目录作为更好的方法吗?相关的知识,希望对你有一定的参考价值。

我是Python的初学者,也是shell脚本背景的初学者。我已经学习了shutil和subprocess来创建文件/目录。

我的问题是,在我的操作系统(Linux / Windows)中管理文件的哪一个更好,推荐的方法?我读了一些不鼓励使用OS命令的Python书籍。

我对Linux很熟悉并且主要在Linux环境中工作,我非常倾向于使用rmmkdircp命令来管理文件。使用一个比另一个有问题/好处吗?

答案

我回家后会尝试补充这一点,但刚开始我会告诉我昨天写的一个示例代码。

你可以自己尝试一下。

  1. 我使用shutil和subprocess.call从一个空文件中创建了100k个副本,使用命令时间来获取执行时间。结果比我预期的要糟糕。 shutil花了7秒钟。子进程耗时2分30秒。
  2. 根据您使用子进程的方式,您可以通过配置文件或用户输入允许代码注入。
  3. 兼容性问题。 Shutil已经为您处理了。
另一答案

它们都有不同的用途

shutil模块对文件和文件集合提供了许多高级操作。特别是,提供了支持文件复制和删除的功能。有关单个文件的操作,另请参阅os模块。 https://docs.python.org/2/library/shutil.html

子进程模块允许您生成新进程,连接到它们的输入/输出/错误管道,并获取它们的返回代码。该模块旨在替换几个较旧的模块和功能:

如果你更擅长并且已经在linux环境中工作过,那么Python子进程可以为你提供空闲模块。

https://docs.python.org/2/library/subprocess.html

基本上你可以借助子进程函数执行所有Linux命令,例如

subprocess.call
subprocess.check_call
subprocess.check_output

如需更多控制,您可以使用

subprocess.Popen

让我们举个例子来执行命令“ls -l”

from subprocess import Popen
import shlex

command="ls -l"
args = shlex.split(command) #it will break the command in list acceptable by Popen
p1=Popen(args)

通过这种方式,您可以运行任何复杂的命令。

我将根据我的经验推荐subprocess,它很简单,可以执行各种任务,可以运行linux命令(基本上任何有效的命令取决于操作系统),对Windows系统也很有帮助。

以上是关于Python:我应该使用shutil或subprocess来操作文件和目录作为更好的方法吗?的主要内容,如果未能解决你的问题,请参考以下文章

python中shutil和shutil库的用法

Python 高级文件操作 shutil

python内置库--shutil

Python_Shutil模块_os模块的升级版

python文件复制移动shutil模块

在 python 中使用 shutil.copytree() 的问题