首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python:作为一种更好的方法,我应该使用shutil或子进程来操作文件和目录吗?

Python:作为一种更好的方法,我应该使用shutil或子进程来操作文件和目录吗?
EN

Stack Overflow用户
提问于 2017-05-11 03:12:40
回答 3查看 3.1K关注 0票数 4

我是Python的初学者,有shell脚本背景。我已经学习了shutilsubprocess模块来创建文件/目录。

我的问题是,哪个更好,哪个建议用于管理我的操作系统(Linux/Windows)中的文件?我读过一些Python书籍,它们不鼓励为这些目的使用OS命令。

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

EN

回答 3

Stack Overflow用户

发布于 2017-12-29 12:12:18

我将在回家后尝试对此加以补充,但首先,我将告诉我昨天编写的示例代码。

不过你可以自己试试。

  1. 我用shutil和subprocess.call从一个空文件中复制了100 k份,使用命令时间来获得执行时间。结果比我预期的还要糟糕。舒蒂尔用了7秒。子进程花费了2分30秒。
  2. 根据您如何使用子进程,您可以允许代码注入.通过配置文件或用户输入。
  3. 兼容性问题。已经帮你处理好了。
票数 2
EN

Stack Overflow用户

发布于 2017-12-29 12:40:00

两者都有不同的目的。

(Python 2)模块对文件和文件集合提供了许多高级操作.特别是提供了支持文件复制和删除的功能。有关单个文件的操作,请参见os模块。

(Python 2)模块允许您生成新进程,连接到它们的输入/输出/错误管道,并获得它们的返回代码。该模块打算取代几个较旧的模块和功能:

如果您是初学者,并且在Linux环境中工作过,subprocess可能是您理想的模块。

基本上,您可以在subprocess函数的帮助下执行所有的Linux命令。

代码语言:javascript
复制
subprocess.call
subprocess.check_call
subprocess.check_output

对于更多的控制,您可以使用subprocess.Popen

让我们举一个要执行命令"ls -l"的例子

代码语言:javascript
复制
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上也很有帮助。

票数 1
EN

Stack Overflow用户

发布于 2021-11-19 09:32:08

shutil的一个非常重要的方面是它在复制/存档操作中的cross-platformness。例如,只要让它复制一个文件,您就不关心它是运行在Linux上,还是运行在Windows或MacOS上。您只需询问shutil您想要什么,shutil将负责将您的请求转到基于主机操作系统的适当命令。

此外,作为一般规则,每次为一组更特定的任务创建库时,您都可以期望在这些任务中从库中获得更好的性能。shutil的docstring给出了这样的总结:“用于复制和归档文件和目录树的实用程序函数”,因此它非常具体。值得注意的一点是,每次运行带有子进程的东西时,它都会创建一个新的进程,因此如果您经常执行它,它可能会成为一个显著的减速,然而,shutil可以“直接”完成它的特定任务,并without创建新进程的开销。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43905907

复制
相关文章

相似问题

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