我正在使用getopt来处理命令行可选参数,它应该接受一个列表。事情是这样的:指定一个列表作为python中的命令行参数
foo.py --my_list=[1, 2, 3, 4,5]
但这修剪后 “[1,” 一切
我的问题是: A)有没有它转换成字符串来指定列表的方式吗? (使用getopt)
B)如果我要将列表转换为字符串,如何将此列表转换为字符串?例如像mylist.split(“?”)来摆脱方括号?有没有更好的办法?
谢谢
我正在使用getopt来处理命令行可选参数,它应该接受一个列表。事情是这样的:指定一个列表作为python中的命令行参数
foo.py --my_list=[1, 2, 3, 4,5]
但这修剪后 “[1,” 一切
我的问题是: A)有没有它转换成字符串来指定列表的方式吗? (使用getopt)
B)如果我要将列表转换为字符串,如何将此列表转换为字符串?例如像mylist.split(“?”)来摆脱方括号?有没有更好的办法?
谢谢
也许你应该只是将引数括在引号中?
foo.py "--my_list=[1, 2, 3, 4,5]"
否则,每个空间将被视为参数的分隔符。
而这还不是蟒蛇,因为但由于其解析这些参数,并将其提供给Python程序外壳。 – extraneon 2010-01-18 14:29:02
部分属实。在Windows上,命令行只是一个字符串。即使UNIX没有任何将参数传递给程序的特殊数据结构,它仍然只是一个字符串。但是,这是一个广泛实施的惯例,但并不普遍。是的,C运行时具有这方面的规格。 – Joey 2010-01-18 14:33:10
您也可以执行'--my-list =“[1,2,3,4,5]”'。我通常使用这种形式,因为它通常就像'--my-list =“$ MY_LIST”'。 – 2010-01-18 14:43:14
从Python optparse的帮助页面: “
parser.add_option("-f")
parser.add_option("-p", type="float", nargs=3, dest="point")
在解析命令行
-f foo.txt -p 1 -3.5 4 -fbar.txt
optparse将设置
options.f = "foo.txt"
options.point = (1.0, -3.5, 4.0)
options.f = "bar.txt"
”
如果我不能用一个标准的解析器(optparse或argparse),以我的应用程序,然后我用ast.literal_eval函数解析式列表的输入参数如下:
import sys, ast
inputList = ast.literal_eval(sys.argv[1])
print type(inputList)
print inputList
让假设这个代码存储在testParser.py文件中。通过执行该脚本:
$ python testParser.py "[1,2,3,4, [123, 456, 789], 'asdasd']"
我们得到以下的输出:
<type 'list'>
[1, 2, 3, 4, [123, 456, 789], 'asdasd']
因此,使用足够安全ast.literal_eval功能和插入表作为一串代码,我们有理想的结果。
相关链接:
Using python's eval() vs. ast.literal_eval()?
http://docs.python.org/2/library/functions.html?highlight=eval#eval
更新的方法是使用argparse
库并添加列表作为命令行参数。这样,您不必进行任何手动解析。
例子:
parser = argparse.ArgumentParser()
parser.add_argument(
"-values",
nargs="*", # expects ≥ 0 arguments
type=int,
default=[35, 40, 50, 60, 70, 80, 90], # default list if no arg value
)
,你会再打电话这样的:
python3 someprogram.py -values 1 2 3
因为这篇文章是5岁,'optparse'现在已被弃用''argparse' – SAAD 2015-09-04 13:06:43
你是什么意思'使用append行动'?这听起来令人兴奋,但不确定你在说什么。 – 2017-06-03 02:06:48
@MonicaHeddneck请参阅https://docs.python.org/3/library/optparse.html#standard-option-actions - 他们有一个“append”动作的例子:'parser.add_option(“ - t”,“ --tracks“,action =”append“,type =”int“)'。 – 2017-06-03 04:28:55