首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么使用Python的os模块方法而不是直接执行shell命令?

为什么使用Python的os模块方法而不是直接执行shell命令?
EN

Stack Overflow用户
提问于 2015-02-18 07:00:29
回答 3查看 27.5K关注 0票数 158

我正在尝试理解使用Python库函数来执行特定于操作系统的任务背后的动机,比如创建文件/目录、更改文件属性等,而不是仅仅通过os.system()subprocess.call()执行这些命令

例如,为什么我要使用os.chmod而不是os.system("chmod...")

我知道尽可能多地使用Python的可用库方法比直接执行shell命令更具“Python风格”。但是,从功能的角度来看,这样做背后还有其他动机吗?

我在这里只是在谈论执行简单的一行shell命令。例如,当我们需要对任务的执行进行更多的控制时,我理解使用subprocess模块更有意义。

EN

回答 3

Stack Overflow用户

发布于 2015-02-18 07:10:04

这样更安全。为了给你一个概念,这里是一个示例脚本

代码语言:javascript
复制
import os
file = raw_input("Please enter a file: ")
os.system("chmod 777 " + file)

如果来自用户的输入是test; rm -rf ~,这将删除主目录。

这就是为什么使用内置函数更安全的原因。

这也是为什么你应该使用子进程而不是系统。

票数 133
EN

Stack Overflow用户

发布于 2015-02-18 07:47:46

Shell调用是特定于操作系统的,而Python OS模块函数在大多数情况下不是。而且它避免了派生一个子进程。

票数 16
EN

Stack Overflow用户

发布于 2015-02-18 19:23:11

效率要高得多。"shell“只是包含大量系统调用的另一个操作系统二进制文件。为什么要为单个系统调用而产生创建整个shell进程的开销?

当你将os.system用于非内置外壳的东西时,情况就更糟了。您启动一个shell进程,该进程又启动一个可执行文件,然后(两个进程相隔)进行系统调用。至少subprocess已经消除了对外壳中介进程的需求。

这并不是特定于Python的。出于同样的原因,systemd是对Linux启动时间的改进:它自己进行必要的系统调用,而不是产生上千个shell。

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

https://stackoverflow.com/questions/28572833

复制
相关文章

相似问题

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