🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# 导语 > 在编写python脚本的时候,偶尔想调用shell命令来执行一些操作会比较方便些。python中目前有多种方法可以达到这样的目的,有的仅仅是执行命令不返回需要的结果,有些可以返回执行的结果保存到变量,以便于后续操作 > 涉及到的模块有 `os.system`、`commands`、` subprocess` --- 下面以具体的例子说明情况 ``` #!/usr/bin/env bash import os import commands import subprocess # -- os.system() -- # execute shell command in sub-terminal and can not get the return result result1 = os.system('ls -l .') print('result: ') print(result1) print('----------------------------------------') # -- os.popen() -- # execute and can get the return result result2 = os.popen('ls -l') # file type print('type: ', type(result2)) result3 = os.popen('ls -l').readlines() # list file print('type: ', type(result3)) print('result: ') print(result3) print('----------------------------------------') # -- commands -- # import commands # method: # getoutput # getstatusoutput result4 = commands.getoutput('ls -l') print('result: ') print(result4) print('=======') result5_status, result5_output = commands.getstatusoutput('ls -l') print('status: ', result5_status) print('output: ') print(result5_output) print('----------------------------------------') # subprocess # import subprocess # method: # call(["cmd","arg1", "arg2"], shell=True) refer to os.system() # Popen("cmd", shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) refer to os.popen # #result6 = subprocess.call("ls -l", shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) p = subprocess.Popen('ls *.txt', shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) print(p.stdout.readlines()) for line in p.stdout.readlines(): print line, ## wait for child process to terminate, and turn returncode retval = p.wait() ## if ok, return 0 print(retval) ```