运行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)去解析,得到对应参数的值。
版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。
工作时间:8:00-18:00
客服电话
电子邮件
admin@qq.com
扫码二维码
获取最新动态