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

我试图理解使用Python的库函数来执行操作系统特定的任务,如创建文件/目录,更改文件属性等,而不是只通过执行这些命令通过os.system()或subprocess.call() )?

例如,为什么要使用os.chmod而不是os.system(“chmod …”)?

我理解,更多的是“pythonic”使用Python的可用库方法尽可能,而不是只直接执行shell命令。但是,从功能的角度来看,还有其他动机吗?

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

>它更快,os.system和subprocess.call创建新的进程,这是不必要的东西这个简单。事实上,带有shell参数的os.system和subprocess.call通常创建至少两个新进程:第一个是shell,第二个是你正在运行的命令(如果它不是shell内置的喜欢测试)。 >一些命令在单独的进程中是无用的。例如,如果运行os.spawn(“cd dir /”),它将更改子进程的当前工作目录,但不会更改Python进程的当前工作目录。你需要使用os.chdir。 >你不必担心shell解释的特殊字符。 os.chmod(path,mode)将工作,不管文件名是什么,而os.spawn(“chmod 777”路径)将失败可怕的,如果文件名是什么样的; rm -rf〜。 (注意,如果你使用没有shell参数的subprocess.call,你可以解决这个问题。) >你不必担心以破折号开头的文件名。 os.chmod(“ – quiet”,mode)将更改名为–quiet的文件的权限,但os.spawn(“chmod 777 –quiet”)将失败,因为–quiet被解释为参数。即使对于subprocess.call([“chmod”,“777”,“–quiet”])也是如此。 >你有更少的跨平台和跨shell关注,因为Python的标准库应该为你处理。你的系统有chmod命令吗?是否安装?它是否支持您期望它支持的参数? os模块将尽可能的跨平台和文档,当它是不可能的。 >如果你正在运行的命令有你所关心的输出,你需要解析它,这是比它听起来更棘手,因为你可能会忘记角落情况(文件名空格,制表符和换行符),甚至当你不在乎可移植性。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值