第一章:python
第九节:执行非python程序的os模块及命令行参数sys.argv
1,命令行参数:sys.argv的用法
sys模块通过sys.argv属性提供了对命令行参数的访问。
命令行参数是调用某个程序时除程序名以外的其他参数。
在python中,sys.argv代表命令行输入列表的长度,而该列表的第一项sys.argv[0]永远是程序的名称,即该脚本的文件名(例如:orthoMCL_identity.py)。
>>> import sys
>>> if len(sys.argv) != 3:
... ····print 'need 2 parameter
>>> db=sys.argv[1]
>>> identity=sys.argv[2]
这里要运行python orthoMCL_identity.py db 90,这里的db 90是要输入的两个参数,sys.argv长度为3,orthoMCL_identity.py作为脚本名称,则需要另外两个参数db和90,则满足sys.argv为3的长度。
这里sys.argv[0]是orthoMCL_identity.py这个文件名,而sys.argv[1]表示第一个命令行参数,而sys.argv[2]表示第二个命令行参数。
2,执行非python程序:os模块的用法
os模块提供了多数操作系统的功能接口函数,当os模块被导入后,它会自行适应不同的操作系统平台。
>>> import os
>>> os.chdir('dirname')
#进入一个目录
>>> os.mkdir('dirname')
#创建一个目录
>>> os.makedirs('dirname1/dirname2')
#创建一个多级目录
>>> os.getcwd()
#获取工作的目录路径,即当前工作目录
>>> os.rename('oldname', 'newname')
#重命名文件/目录
>>> os.system('ls')
#运行shell命令
注意,这个shell命令必须是shell内的的命令,而不是~/.bashrc用户自己内定的环境变量,例如alias ll=‘ls -l’,则os.system(‘ll’)会显示ll未定义。
>>> os.popen('bash command')
#运行shell命令,生成对象,利用标签定义后可再用read()或readlines()读取。
实例:
>>> os.popen('less name.txt')
<open file 'less name.txt', mode 'r' at 0x2afe3743edbo>
>>> os.popen('less name.txt').read()
'110 120 119\n'
但要打开的文件名前一定要加入less,cat等shell命令,单单只有文件名则会读取空内容。
目录遍历
os.walk()
函数声明:os.walk(path)
该函数返回一个元组,该元组有三个元素
这3个元素分别表示每次遍历的路径名,目录列表和文件列表
所以,可以将传值的目录进行遍历,且以元组形式返回值
若传值为绝对路径,则返回一个生成器
>>> os.walk('/root/pypi/testdir')
<generator object walk at 0x7f36135a8500>
>>> g=os.walk('/root/pypi/testdir')
#os.walk(os.getcwd())
>>> g.next()
('/root/pypi/testdir', ['jpg'], ['f3', 'f1', 'f2'])
返回一个元组内的三个元素,第一个元素为当前目录路径(绝对路径),第二个元素为该目录下的子目录(如果有多个子目录则返回的列表内有多个元素,如果没有子目录返回空列表),第三个元素为当前目录下的文件名(和第二个元素返回结果大致相同,列表内存在多个元素则存在多个文件,没有文件则返回空列表)
>>> g.next()
('/root/pypi/testdir/jpg', [], ['getjpg.py'])
可返回子目录下的内容,[]表示子目录下再无目录
>>> g.next()
StopIteration
os.path中的join()用法,实现输出当前目录及子目录的绝对路径
os.path.join(fpath, filename)
会将fpath这个路径及filename文件名直接作拼接
>>> for path, d, filelist in os.walk(os.getcwd()):
#每次遍历输出一个路径名称,第一次是当前目录,第二次是当前目录下的子目录
... ····for filename in filelist:
#循环取出该目录下的文件名
... ········os.path.join(path, filename)
...
os.path是一个方法,具体实现方法是os.path的一些模块,书中222页是op.path模块中的路径名访问函数。https://docs.python.org/2/library/os.path.html