sys.argv 是命令行参数列表,注:sys.argv[0] 表示脚本名。
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import sys
print '参数个数为:', len(sys.argv), '个参数。'
print '参数列表:', str(sys.argv)
执行以上代码,输出结果为:
$ python test.py arg1 arg2 arg3
参数个数为: 4 个参数。
参数列表: ['test.py', 'arg1', 'arg2', 'arg3']
getopt 模块是专门处理命令行参数的模块,用于获取命令行选项和参数,也就是 sys.argv。命令行选项使得程序的参数更加灵活。支持短选项模式(-)和长选项模式(--)。
该模块提供了两个方法及一个异常处理来解析命令行参数。
getopt.getopt 方法
getopt.getopt 方法用于解析命令行参数列表,语法格式如下:
getopt.getopt(args, options[, long_options])
方法参数说明:
args: 要解析的命令行参数列表。
(可以取 sys.argv[1:],[1:] 表示忽略脚本名)
options: 以字符串的格式定义,options 后的冒号 (:) 表示该选项必须有附加的参数,不带冒号表示该选项不附加参数,即开关选项。
(比如-h 是开关选项不需要后面加参数值,所以直接以 “h” 表示;-o output 不是开关选项,后面必须加参数 output,所以可以以"o:",两者一起表示可以用"ho:")
long_options: 以列表的格式定义,long_options 后的等号 (=) 表示如果设置该选项,必须有附加的参数,否则就不附加参数。
该方法返回值由两个元素组成: 第一个是 (option, value) 元组的列表。 第二个是参数列表,包含那些没有'-'或'--'的参数。
(和 options 类似,只不过表达形式不一样,这个是以 list 格式表示,且非开关选项用"="表示,例如 ["help","output="])
另外一个方法是 getopt.gnu_getopt,这里不多做介绍。
在没有找到参数列表,或选项的需要的参数为空时会触发该异常。
异常的参数是一个字符串,表示错误的原因。属性 msg 和 opt 为相关选项的错误信息。
主流的有 4 种
os.system()
、os.popen()
、commands.getstatusoutput()
、subprocess.Popen()
os.system()
这种是最简单的,但是只能执行,不能获取返回值
os.popen()
这种能拿到返回值,但是不能拿到返回状态
commands.getstatusoutput()
这种在 Windows 上会出现兼容性问题,无法执行(亲测),但是在 Linux 平台上还是挺好用的
subprocess.Popen()
目前我采用的是这种方式,给一个这种方式的 demo
import subprocess # 导入subprocess模块
cmd = 'ls -al' # 定义需要执行的cmd
child = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) # 执行系统命令
# child.wait() # 等待系统命令返回后再执行后续命令,看需要可加可不加
(stdoutdata, stderrdata) = child.communicate() # 获取返回数据
print child.returncode # 打印查看命令的returncode
print("stderrdata:%s") % stderrdata # 打印查看
这边我用的是 logging 模块,直接上代码
# util.py
#! /usr/bin/env python
# -*- coding:utf-8 -*-
import logging # 导入logging模块
# 创建一个handler,用于写入日志文件
fh = logging.FileHandler('./test.log')
# 再创建一个handler,用于输出到控制台
ch = logging.StreamHandler()
# 定义handler的输出格式formatter
formatter = logging.Formatter('[%(asctime)s][%(filename)s][%(levelname)s]:%(message)s')
fh.setFormatter(formatter)
ch.setFormatter(formatter)
# 创建一个logger
logger = logging.getLogger()
logger.setLevel(logging.DEBUG)
logger.addHandler(fh)
logger.addHandler(ch)
# test.py
import util
util.logger.debug("i am debug")
# console输出
[2016-10-17 11:19:36,999][monkey.py][DEBUG]:i am debug
先记录到这里,之后补充