在编写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)
上一篇:Django学习笔记
下一篇:Django学习笔记