python获取命令行参数_【整理】Python中如何获得并处理命令行参数

 2023-09-17 阅读 32 评论 0

摘要:运行Python脚本时,时常需要从命令行中传递一些参数到Python程序中,但是如何获得相应的传递进来的参数,以及如何解析这些参数,是很多人,包括最开始的我,所遇到的问题。 下面,就对此总结一下: python调用命令行、先介绍

运行Python脚本时,时常需要从命令行中传递一些参数到Python程序中,但是如何获得相应的传递进来的参数,以及如何解析这些参数,是很多人,包括最开始的我,所遇到的问题。

下面,就对此总结一下:

python调用命令行、先介绍基本背景知识:

1. Python中,可以通过sys.argv获得,命令行中所输入的全部的内容,获得的值是个列表变量。

列表中的值,分别是命令行中,通过空格分隔出来的各个值。

python gevent、2.可以通过(旧的)optparse或(新的)argparse,来实现解析命令行中所输入的参数。

下面就是详细的代码示例:#!/usr/bin/python

# -*- coding: utf-8 -*-

python全局变量?"""

【功能】

演示Python中命令行参数的获取和解析:

python爬虫教程?【整理】Python中如何获得并处理命令行参数

https://www.crifan.com/python_capture_and_parse_command_line_parameter

【作者】 Crifan Li

python 输入、【版本】 2012-11-15

"""

#sys模块中包含了相关的,获得命令参数的功能

python编程,import sys;

#optparse是一个用于解析命令行输出参数的模块

import optparse;

#不过,该模块自动Python 2.7往后就废弃了,而推荐使用argparse:

#Deprecated since version 2.7: The optparse module is deprecated and will not be developed further; development will continue with the argparse module.

import argparse;

def cmdParaDemo():

# 1. 演示sys.argv所获得的命令行中的输入的所有的内容

print "The whole string you input can get from sys.argv=",sys.argv;

argvLen = len(sys.argv);

print "total fileds in sys.argv=",argvLen;

for i,eachArg in enumerate(sys.argv):

print "[%d]=%s"%(i, eachArg);

# 2. 演示optparse的用法

oldParser = optparse.OptionParser();

oldParser.add_option("-u","--username",action="store", type="string",dest="username_optparse",help="Your user name");

oldParser.add_option("-a","--age",action="store", type="int",dest="age_optparse",help="Your age");

(options, args) = oldParser.parse_args();

#此处用于导出所获得的变量

#如果没有导出变量,则后面代码中,如果用到此处定义的参数所对应的变量时,就会报错,说找不到相关的变量

#NameError: global name 'username_optparse' is not defined

for i in dir(options):

exec(i + " = options." + i);

print "optparse: Your input username_optparse=%s, type(username_optparse)=%s, age_optparse=%d, type(age_optparse)=%s"%(username_optparse, type(username_optparse), age_optparse, type(age_optparse));

# 3. 演示argparse的用法

newParser = argparse.ArgumentParser();

newParser.add_argument("-u", "--username", dest="username_argparse", help="Your user name");

newParser.add_argument("-a", "--age", type=int, dest="age_argparse", help="Your age");

args = newParser.parse_args();

#后面,如果想要使用变量,则可以:

#args.username_argparse

#args.age_argparse

#的方式引用

print "args=",args; #args= Namespace(age_argparse=1000, username_argparse='crifanLi')

print "type(args)=",type(args); #type(args)=

argsDict = args.__dict__;

print "parsed argsDict=",argsDict; #parsed argsDict= {'age_argparse': 1000, 'username_argparse': 'crifanLi'}

# for eachArg in argsDict.keys():

# exec(eachArg + " = " + argsDict[eachArg]); # -> TypeError: cannot concatenate 'str' and 'int' objects

# for eachArg in argsDict.keys():

# if(type(argsDict[eachArg]) != ""):

# exec(eachArg + " = " + str(argsDict[eachArg])); # -> NameError: name 'crifanLi' is not defined

# else:

# exec(eachArg + " = " + argsDict[eachArg]);

#此处用于导出所获得的变量

#(1)如果没有导出变量,则后面代码中:

#如果用到此处定义的参数所对应的变量时,就会报错,说找不到相关的变量

#NameError: global name 'username_optparse' is not defined

#(2)而导出之后,后面就可以直接通过参数名:

#username_argparse

#age_argparse

#的方式引用参数了。

for eachArg in argsDict.keys():

exec(eachArg + " = args." + eachArg);

print "argparse: Your input username_argparse=%s, type(username_argparse)=%s, age_argparse=%d, type(age_argparse)=%s"%(username_argparse, type(username_argparse), age_argparse, type(age_argparse));

###############################################################################

if __name__=="__main__":

cmdParaDemo();

而对应的完整的输出为:D:\tmp\tmp_dev_root\python\parse_cmd_para>parse_command_line_para.py -u crifanLi -a 1000

The whole string you input can get from sys.argv= ['D:\\tmp\\tmp_dev_root\\python\\parse_cmd_para\\parse_command_line_para.py', '-u', 'crifanLi', '-a', '1000']

total fileds in sys.argv= 5

[0]=D:\tmp\tmp_dev_root\python\parse_cmd_para\parse_command_line_para.py

[1]=-u

[2]=crifanLi

[3]=-a

[4]=1000

optparse: Your input username_optparse=crifanLi, type(username_optparse)=, age_optparse=1000, type(age_optparse)=

args= Namespace(age_argparse=1000, username_argparse='crifanLi')

type(args)=

parsed argsDict= {'age_argparse': 1000, 'username_argparse': 'crifanLi'}

argparse: Your input username_argparse=crifanLi, type(username_argparse)=, age_argparse=1000, type(age_argparse)=

D:\tmp\tmp_dev_root\python\parse_cmd_para>parse_command_line_para.py --username crifanLi --age 1000

The whole string you input can get from sys.argv= ['D:\\tmp\\tmp_dev_root\\python\\parse_cmd_para\\parse_command_line_para.py', '--username', 'crifanLi', '--age', '1000']

total fileds in sys.argv= 5

[0]=D:\tmp\tmp_dev_root\python\parse_cmd_para\parse_command_line_para.py

[1]=--username

[2]=crifanLi

[3]=--age

[4]=1000

optparse: Your input username_optparse=crifanLi, type(username_optparse)=, age_optparse=1000, type(age_optparse)=

args= Namespace(age_argparse=1000, username_argparse='crifanLi')

type(args)=

parsed argsDict= {'age_argparse': 1000, 'username_argparse': 'crifanLi'}

argparse: Your input username_argparse=crifanLi, type(username_argparse)=, age_argparse=1000, type(age_argparse)=

提示:

期间遇到一个问题,折腾半天,终于解决了:

【总结】

简单说就是通过sys.argv可以获得所输入的所有的内容,包括参数。

然后通过相关参数解析模块(optparse或argparse)去解析,得到对应参数的值。

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/4/72442.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息