以元组为参数调用脚本

时间:2019-01-12 12:58:01

标签: python command-line arguments tuples

我希望能够从命令行像这样调用python脚本:

error-chain

然后能够在我的程序中操作这些代码(输入所需的数量,例如,可以输入10个元组)?

到目前为止,我能够做类似事情的唯一方法就是这样称呼:

failure

或:

python ./pyProg (1, 2) (2, 3)

,它们以字符串形式出现。 实现我想要做的最好的方法是什么?

谢谢

2 个答案:

答案 0 :(得分:2)

您可以将元组作为字符串传递,并使用ast.literal_eval()将其转换为实际的元组:

from sys import argv
from ast import literal_eval

for x in argv[1:]:
    tup = literal_eval(x)
    print(tup, type(tup))  

可以这样称呼:

$ python ./pyProg.py "(1, 2)"
(1, 2) <class 'tuple'>

处理错误:

如果传递的字符串不是有效的表达式,则可以同时引发SyntaxErrorValueError。因此,将以上内容包装在try/except中可能是安全的:

from sys import argv
from ast import literal_eval

for x in argv[1:]:
    try:
        tup = literal_eval(x)
        print(tup, type(tup))
    except (SyntaxError, ValueError):
        print("%s -> Invalid tuple format given" % x)

可以在这里看到

$ python ./pyProg.py "(1, 2"
(1, 2 -> Invalid tuple format given
$ python ./pyProg.py "(1, 2) (1, 2)"
(1, 2) (1, 2) -> Invalid tuple format given

答案 1 :(得分:1)

如果您希望参数采用特定格式,那么如果您使用解析各个值的常规参数处理解析器,则可用性可能会更好。

arg_tuples = [tuple(t.split(',') for t in sys.argv[1:]]

省略括号可让您省略shell命令行上的引号(尽管如果元组成员不总是数字,则出于其他原因当然也可能需要引号。)

sys.argv[]根据定义是一个字符串列表,shell不(方便地)没有任何其他数据类型。