python中命令行参数
python中有一个模块sys,sys.argv这个属性提供了对命令行参数的访问。命令行参数是调用某个程序时除程序名外的其他参数。
sys.argv是命令行参数的列表
len(sys.argv)是命令行参数的个数
下面我们用一个简单的例子来说明一下。
#!/usr/bin/python #coding:utf-8 import sys ##加载sys这个模块。 for i in range(len(sys.argv)): print "第%d个参数是:%s" % (i,sys.argv[i]) print
运行上面的脚本:
python argv.py 1 2 3
结果如下:
第0个参数是:argv.py
第1个参数是:1
第2个参数是:2
第3个参数是:3
从上面的脚本运行结果我们能看得出来第一个参数是脚本名本身也就是第0个参数。其余的一次类推。
有了这个sys.argv参数我们就可以向脚本传递一些我们想要用的参数。
另一个比较常用的模块os.path可以完成对路径的操作。它提供的函数可以完成管理和操作文件路径中的各个部分,获取文件或子目录信息,文件路径查询操作。
下面列出一些os模块中常用的函数:
函数名: 作用:
os.mkfifo('path/filename')/os.mknod('path/filename',mode,device) 创建命名管道/创建文件系统节点
os.remove('path/filename') 删除文件
os.rename('path/filename1','path/filename2')/renames() 重命名文件
os.stat('path/filename') 返回文件信息
os.symlink('path/filename','path/ln_filename') 创建符号链接
os.utime() 更新时间戳
os.tmpfile() 创建并打开('w+b')一个新的临时文件
os.walk() 生成一个目录树下的所有文件名
目录/文件夹
os.chdir()/fchdir() 改变当前工作目录/通过一个文件描述符改变当前工作目录
chroot() 改变当前进程的根目录
listdir() 列出指定目录的文件
getcwd()/getcwdu() 返回当前工作目录/功能相同,但返回一个Unicode对象
mkdir()/makedirs() 创建目录/创建多层目录
rmdir()/removedirs() 删除目录/删除多层目录
访问/权限
access() 检验权限模式
chmod() 改变权限模式
chown()/lchown() 改变ower和group ID /功能相同,但不会跟踪链接
umask() 设置默认权限模式
文件描述符操作
open() 底层的操作系统open(对于文件,使用标准的内建open() 函数)
read()/write() 根据文件描述符读取/写入数据
dup()/dup2() 复制文件描述符号/功能相同,但是是复制到一个文件描述符设备号。
makedev() 从major和minor设备号创建一个原始设备号
major() /minor() 从原始设备号获得major/minor设备号
下面是os.path模块中的路径名访问的一些函数
函数描述
os.path.basename() 去掉目录路径,返回文件名
os.path.dirname() 去掉文件名,返回目录路径
os.path.join() 将分离的各部分组合成一个路径名
os.path.split() 返回(dirname(),basename())元组
os.path.splitdrive() 返回(dirvename,pathname)元组
os.path.splitext() 返回(filename,extension)元组
信息
getatime() 返回最近访问时间
getctime() 返回文件创建时间
getmtime() 返回最近文件修改时间
getsize() 返回文件大小(以字节为单位)
查询
exists() 指定路径(文件或目录)是否存在
isabs() 指定路径是否为绝对路径
isdir() 指定路径是否存在且为一个目录
isfile() 指定路径是否存在且为一个文件
islink() 指定路径是否存在且为一个符号链接
ismount() 指定路径是否存在且为一个挂载点
samefile() 两个路径名是否指向同一个文件
本篇将介绍python中sys, getopt模块处理命令行参数
如果想对python脚本传参数,python中对应的argc, argv(c语言的命令行参数)是什么呢?
需要模块:sys
参数个数:len(sys.argv)脚本名: sys.argv[0]
参数1: sys.argv[1]
参数2: sys.argv[2]
test.py
import sys print "脚本名:", sys.argv[0] for i in range(1, len(sys.argv)): print "参数", i, sys.argv[i]
>>>python test.py hello world
脚本名:test.py
参数 1 hello
参数 2 world
python中使用命令行选项:
例如我们需要一个convert.py脚本。它的作用是处理一个文件,并将处理后的结果输出到另一个文件中。
要求该脚本满足以下条件:
1.通过-i -o选项来区别参数是输入文件还是输出文件.
>>> python convert.py -i inputfile -o outputfile
2.当不知道convert.py需要哪些参数时,用-h打印出帮助信息
>>> python convert.py -h
getopt函数原形:
getopt.getopt(args, options[, long_options])
convert.py
import sys, getopt opts, args = getopt.getopt(sys.argv[1:], "hi:o:") input_file="" output_file="" for op, value in opts: if op == "-i": input_file = value elif op == "-o": output_file = value elif op == "-h": usage() sys.exit()
代码解释:
a) sys.argv[1:]为要处理的参数列表,sys.argv[0]为脚本名,所以用sys.argv[1:]过滤掉脚本名。
b) "hi:o:": 当一个选项只是表示开关状态时,即后面不带附加参数时,在分析串中写入选项字符。当选项后面是带一个附加参数时,在分析串中写入选项字符同时后面加一个":"号。所以"hi:o:"就表示"h"是一个开关选项;"i:"和"o:"则表示后面应该带一个参数。
c) 调用getopt函数。函数返回两个列表:opts和args。opts为分析出的格式信息。args为不属于格式信息的剩余的命令行参数。opts是一个两元组的列表。每个元素为:(选项串,附加参数)。如果没有附加参数则为空串''。
getopt函数的第三个参数[, long_options]为可选的长选项参数,上面例子中的都为短选项(如-i -o)
长选项格式举例:
--version
--file=error.txt
让一个脚本同时支持短选项和长选项
getopt.getopt(sys.argv[1:], "hi:o:", ["version", "file="])