|
|
51CTO旗下网站
|
|
移动端

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

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

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

【大咖·来了 第7期】10月24日晚8点观看《智能导购对话机器人实践》

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
分享:
大家都在看
猜你喜欢

订阅专栏+更多

16招轻松掌握PPT技巧

16招轻松掌握PPT技巧

GET职场加薪技能
共16章 | 晒书包

289人订阅学习

20个局域网建设改造案例

20个局域网建设改造案例

网络搭建技巧
共20章 | 捷哥CCIE

645人订阅学习

WOT2019全球人工智能技术峰会

WOT2019全球人工智能技术峰会

通用技术、应用领域、企业赋能三大章节,13大技术专场,60+国内外一线人工智能精英大咖站台,分享人工智能的平台工具、算法模型、语音视觉等技术主题,助力人工智能落地。
共50章 | WOT峰会

0人订阅学习

读 书 +更多

C# 2005 & .NET 3.0高级编程(第5版)

该书为C#经典名著!是Wrox红皮书中最畅销的品种之一。从第1版开始就名满天下;其第3版被评选为2005年最权威的十大IT图书之一;并荣获“2005...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊

51CTO服务号

51CTO播客