Python:我应该使用shutil或subprocess来操作文件和目录作为更好的方法吗?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python:我应该使用shutil或subprocess来操作文件和目录作为更好的方法吗?相关的知识,希望对你有一定的参考价值。
我是Python的初学者,也是shell脚本背景的初学者。我已经学习了shutil和subprocess来创建文件/目录。
我的问题是,在我的操作系统(Linux / Windows)中管理文件的哪一个更好,推荐的方法?我读了一些不鼓励使用OS命令的Python书籍。
我对Linux很熟悉并且主要在Linux环境中工作,我非常倾向于使用rm
,mkdir
,cp
命令来管理文件。使用一个比另一个有问题/好处吗?
我回家后会尝试补充这一点,但刚开始我会告诉我昨天写的一个示例代码。
你可以自己尝试一下。
- 我使用shutil和subprocess.call从一个空文件中创建了100k个副本,使用命令时间来获取执行时间。结果比我预期的要糟糕。 shutil花了7秒钟。子进程耗时2分30秒。
- 根据您使用子进程的方式,您可以通过配置文件或用户输入允许代码注入。
- 兼容性问题。 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来操作文件和目录作为更好的方法吗?的主要内容,如果未能解决你的问题,请参考以下文章