当前位置:  开发笔记 > 编程语言 > 正文

Python - 何时可以使用os.system()发出常见的Linux命令

如何解决《Python-何时可以使用os.system()发出常见的Linux命令》经验,为你挑选了2个好方法。

从另一个线程转移,何时使用os.system()发出rm -rf,cd,make,xterm,ls等命令是否合适?

考虑到上述命令的模拟版本(make和xterm除外),我假设使用这些内置python命令而不是使用os.system()更安全

有什么想法吗?我很乐意听到他们的声音.



1> Darin Dimitr..:

经验法则:如果有一个内置的Python函数来实现这个功能,请使用此函数.为什么?它使您的代码可以跨不同系统移植,更安全,可能更快,因为不需要生成其他进程.


更不用说:如果你需要做很多事情,那么启动大量新进程可能会带来性能问题.

2> asveikau..:

其中一个问题system()是,它意味着了解shell的语法和语言,以便解析和执行命令行.这可能会导致您没有正确验证输入的错误,并且shell可能会插入诸如变量替换之类的内容,或者以您不期望的方式确定参数的开始或结束位置.另外,另一个操作系统的shell可能有你自己的不同语法,包括你不会马上注意到的非常微妙的分歧.出于这些原因,我宁愿使用execve()而不是system()- 你可以argv直接传递令牌,而不必担心中间的某些事情(错误)解析你的输入.

system()(这也适用于使用execve())的另一个问题是,当你编写代码时,你会说,"寻找这个程序,并将它传递给这些args".这会产生一些可能导致错误的假设.首先是程序存在并且可以在中找到$PATH.也许在某些系统上它不会.其次,可能在某个系统上,甚至是您自己操作系统的未来版本,它将支持一组不同的选项.从这个意义上说,我会避免这样做,除非你绝对肯定你将运行的系统将拥有该程序.(就像你可能把callee程序放在系统上一样,或者调用它的方式是由POSIX强制执行的.)

最后......与寻找合适的程序,创建新流程,加载程序等相关的性能也受到了打击.如果您正在做一些简单的事情mv,那么直接使用系统调用会更有效率.

这些只是避免的几个原因system().当然还有更多.

推荐阅读
ifx0448363
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有