我正在使用getopt处理命令行可选参数,该参数应该接受一个列表。类似于这样:
foo.py --my_list=[1, 2, 3, 4,5]
但是这会截断"[1,"之后的所有内容。
我的问题是: A) 有没有办法指定一个列表而不将其转换为字符串?(使用 getopt)
B) 如果我要将列表转换为字符串,如何将此列表转换为字符串?例如,类似于 mylist.split("?") 来摆脱方括号?是否有更好的方法?
谢谢
我正在使用getopt处理命令行可选参数,该参数应该接受一个列表。类似于这样:
foo.py --my_list=[1, 2, 3, 4,5]
但是这会截断"[1,"之后的所有内容。
我的问题是: A) 有没有办法指定一个列表而不将其转换为字符串?(使用 getopt)
B) 如果我要将列表转换为字符串,如何将此列表转换为字符串?例如,类似于 mylist.split("?") 来摆脱方括号?是否有更好的方法?
谢谢
import sys, ast
inputList = ast.literal_eval( sys.argv[1] )
print type( inputList )
print inputList
$ python testParser.py "[1,2,3,4, [123, 456, 789], 'asdasd']"
<type 'list'>
[1, 2, 3, 4, [123, 456, 789], 'asdasd']
http://docs.python.org/2/library/functions.html?highlight=eval#eval
foo.py "--my_list=[1, 2, 3, 4,5]"
--my-list="[1, 2, 3, 4,5]"
。我通常使用这种形式,因为它通常是像 --my-list="$MY_LIST"
这样的东西。 - Mike DeSimone一种更新的方法是使用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
来自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"
"
我被重定向到了重复的问题:
如何通过命令行将数组传递给Python - Stack Overflow
我正在回答这个问题:
命令行参数是字符串,它们不像程序中的文字那样解析。
argv会自动将命令行参数(由空格分隔)构造成一个列表,简而言之,
sys.argv
是一个列表。
from sys import argv
cmd = "arr = {sys.argv[1]}".format(argv)
exec(cmd)
print(arr[2])
parser.add_option("-t", "--tracks", action="append", type="int")
。 - Alok Singhal