Python3 命令行参数

Python 提供了 getopt 模块来获取命令行参数。

复制代码
$ python test.py arg1 arg2 arg3

Python 中也可以所用 syssys.argv 来获取命令行参数:

  • sys.argv是命令行参数列表。

  • **len(sys.argv)**计算命令行参数个数。

**注:**sys.argv[0] 表示脚本名。

实例

test.py 文件代码如下:

实例

复制代码
#!/usr/bin/python3

import sys

print ('参数个数为:', len(sys.argv), '个参数。')
print ('参数列表:', str(sys.argv))
print ('脚本名:', str(sys.argv[0]))

执行以上代码,输出结果为:

$ python3 test.py arg1 arg2 arg3
参数个数为: 4 个参数。
参数列表: ['test.py', 'arg1', 'arg2', 'arg3']
脚本名: test.py

getopt 模块

getopt 模块是专门处理命令行参数的模块,用于获取命令行选项和参数,也就是 sys.argv。命令行选项使得程序的参数更加灵活。支持短选项模式 - 和长选项模式 --。

该模块提供了两个方法及一个异常处理来解析命令行参数。

getopt.getopt 方法

getopt.getopt 方法用于解析命令行参数列表,语法格式如下:

复制代码
getopt.getopt(args, options[, long_options])

方法参数说明:

  • args: 要解析的命令行参数列表。

  • options : 以字符串的格式定义,options 后的冒号 : 表示该选项必须有附加的参数,不带冒号表示该选项不附加参数。

  • long_options : 以列表的格式定义,long_options 后的等号 = 表示如果设置该选项,必须有附加的参数,否则就不附加参数。

该方法返回值由两个元素组成: 第一个是 (option, value) 元组的列表。 第二个是参数列表,包含那些没有 - 或 -- 的参数。

接下来我们定义一个 site() 函数,然后通过命令行输入站点名称 name 和网址 url ,可以用缩写 nu:

实例

复制代码
import sys
import getopt
 
 
def site():
    name = None
    url = None
 
    argv = sys.argv[1:]
 
    try:
        opts, args = getopt.getopt(argv, "n:u:")  # 短选项模式
     
    except:
        print("Error")
 
    for opt, arg in opts:
        if opt in ['-n']:
            name = arg
        elif opt in ['-u']:
            url = arg
     
 
    print( name +" " + url)
 
site()

测试以上代码,命令行中输入:

复制代码
python3 test.py -n WEISUAN -u www.centos.chat

输出结果为:

复制代码
WEISUAN www.centos.chat

以下实例演示长选项模式的使用:

实例

复制代码
import sys
import getopt
 
def site():
    name = None
    url = None
 
    argv = sys.argv[1:]
 
    try:
        opts, args = getopt.getopt(argv, "n:u:",  
                                   ["name=",
                                    "url="])  # 长选项模式
     
    except:
        print("Error")
 
    for opt, arg in opts:
        if opt in ['-n', '--name']:
            name = arg
        elif opt in ['-u', '--url']:
            url = arg
     
 
    print( name + " " + url)
 
site()

测试以上代码,命令行中输入:

复制代码
python3 test.py -n WEISUAN -u www.centos.chat

输出结果为:

复制代码
WEISUAN www.centos.chat

另外一个方法是 getopt.gnu_getopt,用到的情况比较少,这里不多做介绍。


Exception getopt.GetoptError

在没有找到参数列表,或选项的需要的参数为空时会触发该异常。

异常的参数是一个字符串,表示错误的原因。属性 msgopt 为相关选项的错误信息。

实例

假定我们创建这样一个脚本,可以通过命令行向脚本文件传递两个文件名,同时我们通过另外一个选项查看脚本的使用。脚本使用方法如下:

复制代码
usage: test.py -i <inputfile> -o <outputfile>

test.py 文件代码如下所示:

实例

复制代码
#!/usr/bin/python3

import sys, getopt

def main(argv):
   inputfile = ''
   outputfile = ''
   try:
      opts, args = getopt.getopt(argv,"hi:o:",["ifile=","ofile="])
   except getopt.GetoptError:
      print ('test.py -i <inputfile> -o <outputfile>')
      sys.exit(2)
   for opt, arg in opts:
      if opt == '-h':
         print ('test.py -i <inputfile> -o <outputfile>')
         sys.exit()
      elif opt in ("-i", "--ifile"):
         inputfile = arg
      elif opt in ("-o", "--ofile"):
         outputfile = arg
   print ('输入的文件为:', inputfile)
   print ('输出的文件为:', outputfile)

if __name__ == "__main__":
   main(sys.argv[1:])

执行以上代码,输出结果为:

复制代码
$ python3 test.py -h
usage: test.py -i <inputfile> -o <outputfile>

$ python3 test.py -i inputfile -o outputfile
输入的文件为: inputfile
输出的文件为: outputfile
相关推荐
大聪明-PLUS9 小时前
如何使用 Docker 打包一个简单的应用程序:简易指南
linux·嵌入式·arm·smarc
serve the people11 小时前
Prompts for Chat Models in LangChain
java·linux·langchain
李昊哲小课11 小时前
Ubuntu 24.04 MariaDB 完整安装与配置文档
linux·ubuntu·mariadb
惊讶的猫11 小时前
LSTM论文解读
开发语言·python
测试老哥12 小时前
软件测试之单元测试知识总结
自动化测试·软件测试·python·测试工具·职场和发展·单元测试·测试用例
buvsvdp50059ac12 小时前
如何在VSCode中设置Python解释器?
ide·vscode·python
人间打气筒(Ada)12 小时前
zerotier内网穿透部署(rockylinux部署本地服务器)超详细~~~
linux·内网穿透·内网·公网·zerotier·穿透
njxiejing13 小时前
Python进度条工具tqdm的安装与使用
开发语言·python
耿直小伙13 小时前
电脑已连接网络无线自动重启
windows
Elias不吃糖13 小时前
Git常用指令合集
linux·git