问题
如何执行外部命令,如ls -l
解决方案
使用subprocess
库
在Python 3.5之前,使用subprocess.call()
函数
>>> import subprocess
>>> subprocess.call(['ls', '-l'])
total 4
drwxrwxr-x 4 root root 4096 Apr 18 02:46 test-rs
0
在Python3.5及之后,使用subprocess.run()
函数
>>> import subprocess
>>> subprocess.run(['ls', '-l'])
total 4
drwxrwxr-x 4 root root 4096 Apr 18 02:46 test-rs
CompletedProcess(args=['ls', '-l'], returncode=0)
讨论
命令的执行默认不需要shell环境,所以当你使用ls -l
作为参数时,需要将shell置位True,否则会报错误
>>> import subprocess
>>> subprocess.run('ls -l', shell=True)
total 4
drwxrwxr-x 4 root root 4096 Apr 18 02:46 test-rs
CompletedProcess(args=['ls', '-l'], returncode=0)
通常来说对于执行系统命令,我们会想到os.system
,但在官方文档中已经建议了使用更高级的subprocess
库
Thesubprocess
module provides more powerful facilities for spawning new processes and retrieving their results; using that module is preferable to using this function. See the Replacing Older Functions with the subprocess Module section in thesubprocess
documentation for some helpful recipes.
subprocess
提供了更高级的用法,比如run
可以指定stdin
、stdout
、stderr
,并且可以指定编码、超时时间等等选项,还可以获取到命令的返回结果
更多关于subprocess
库见:https://docs.python.org/3/lib...
来源
Stack Overflow
关注
欢迎关注我的微信公众号:python每日一练
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。