|
|
|
|
移动端

3.1.1 使用sys.argv获取命令行参数

《Python Linux系统管理与自动化运维》第3章打造命令行工具,本章介绍了如何使用Python语言解析ini格式的配置文件以及如何使用Python语言解析命令行参数,紧接着,本章介绍了Python标准库中的logging库,在本章最后,我们介绍了如何使用开源项目打造功能更加强大的命令行工具。本节为大家介绍使用sys.argv获取命令行参数。

作者:赖明星来源:机械工业出版社|2017-09-28 16:34

技术沙龙 | 邀您于8月25日与国美/AWS/转转三位专家共同探讨小程序电商实战

3.1.1 使用sys.argv获取命令行参数

编写Linux下的命令行工具,很多时候都需要解析命令行的参数。如果参数很简单,则可以不使用解析参数的库,直接访问命令行参数。在Python中,sys库下有一个名为argv的列表,该列表保存了所有的命令行参数。argv列表中的第一个元素是命令行程序的名称,其余的命令行参数以字符串的形式保存在该列表中。

例如,现在有一个名为test_argv.py的Python文件,该文件仅仅是导入sys库,然后使用print函数打印argv列表中的内容。test_argv.py文件的内容如下:

  1. from __future__ import print_function  
  2. import sys  
  3.  
  4. print(sys.argv) 

下面是对test_argv.py文件的测试。可以看到,如果不传递任何参数给test_argv.py,则sys.argv有且仅有一个元素,即Python程序的名称。当我们传递了其他命令行参数时,所有参数都以字符串的形式保存到sys.argv中。例如,我们将命令行参数localhost和3306传递给test_argv.py文件后,sys.argv中就有三个元素,分别是Python程序的名称和我们传递的命令行参数。并且,我们传递的3306也以字符串的形式被保存下来。

  1. $ python test_argv.py  
  2. ['test_argv.py']  
  3.  
  4. $ python test_argv.py localhost 3306  
  5. ['test_argv.py', 'localhost', '3306'] 

sys.argv是一个保存命令行参数的普通列表。因为它是一个普通的列表,所以,我们可以直接修改sys.argv的内容。下面是一个修改sys.argv列表的应用场景:

  1. from __future__ import print_function  
  2. import os  
  3. import sys  
  4.  
  5. def main():  
  6.     sys.argv.append("")  
  7.     filename = sys.argv[1]  
  8.     if not os.path.isfile(filename):  
  9.         raise SystemExit(filename + ' does not exists')  
  10.     elif not os.access(filename, os.R_OK):  
  11.         raise SystemExit(filename + ' is not accessible')  
  12.     else:  
  13.         print(filename + ' is accessible')  
  14.  
  15.  
  16. if __name__ == '__main__':  
  17.     main() 

在这个例子中,我们从命令行参数获取文件的名称,然后判断文件是否存在。如果文件不存在,则提示用户该文件不存在;如果文件存在,则使用os.access函数判断我们是否具有对文件的读权限。在这个程序中,我们通过sys.argv[1]获取文件的名称。但是,这里有种异常情况需要考虑,如果用户直接运行我们的程序,没有传递任何命令行参数,那么,访问sys.argv[1]将会出现索引越界的错误。为了避免这个错误,我们可以在访问sys.argv之前先向sys.argv中添加一个空的字符串。添加空字符串以后,无论用户是否提供命令行参数,访问 sys.argv[1]都不会出错。如果用户传递了命令行参数,那么,通过sys.argv[1]访问,得到的是用户提供的命令行参数。

喜欢的朋友可以添加我们的微信账号:

51CTO读书频道二维码


51CTO读书频道活动讨论群:365934973

【责任编辑:book TEL:(010)68476606】

回书目   上一节   下一节
点赞 0
分享:
大家都在看
猜你喜欢

读 书 +更多

信息安全风险评估

信息安全风险评估理论研究日趋成熟,相关资料比较充分,但有关评估实际工作的参考资料很少。本书以信息安全风险评估实践为基础,围绕评估工...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊