【发布时间】:2021-02-19 15:56:15
【问题描述】:
我正在尝试使用库 getopt 来捕获从命令行给出的路径列表,如下所示:
python script.py -l ["a","b","c","d","e"] -p 80 ....
我写的是这样的:
def getValue(self):
'''
get value from command line and initialize
variable !
'''
try:
opts,args = getopt.getopt( self.args ,
"hl:us:r:p:" ,
['help','local_path','update',"remote_host","remote_path","parameter"])
except getopt.GetoptError as err:
print(str(err))
self.usage()
## ----------------- SETTING VARIABLE PASSED BY COMMAND LINE ------------------ ##
for opt,arg in opts:
#----------------------------------------------------------
if opt in ("-l","--local_path"):
self.local_path = arg
if DEBUG:
print('local path: ',self.local_path)
#-----------------------------------------------------------
elif opt in ("-h", "--help"):
self.usage()
#-----------------------------------------------------------
elif opt in ("-s", "--remote_host"):
self.remote_host = arg
if DEBUG:
print('Simulation host: ', self.remote_host)
#-----------------------------------------------------------
elif opt in ("-r", "--remote_path"):
self.remote_path = arg
if DEBUG:
print('Simulation path: ', self.remote_path)
#-----------------------------------------------------------
elif opt in ("-p", "--parameter"):
self.parameter = arg
if DEBUG:
print('Simulation parameter: ',self.parameter)
#-----------------------------------------------------------
elif opt in ("-u","--update"):
#if self.remote_host and self.remote_path:
self.update()
#-----------------------------------------------------------
else:
assert False, "Unhandled Option"
#-----------------------------------------------------------
但不幸的是,这对每个 opts 只取一个值(-l,-p ....) 怎样才能达到我的目的? 提前谢谢!!
【问题讨论】:
-
不要使用
getopt;它主要是为了方便移植已经使用它的另一种语言的代码。对于新代码,请使用argparse。 -
如果您打算将
-l的单个参数作为列表文字,您需要先引用整个内容;[对 shell 有特殊的意义。python script.py -l '["a", "b"]'然后在您的代码中,您仍然需要使用ast.literal_eval将字符串解析为 Python 文字。
标签: python command-line-arguments