2015-09-12 51 views
2

我想传递一个列表作为使用命令行的参数,例如:有没有办法在命令行中输入一个Python程序列表?

$python example.py [1,2,3] [4,5,6] 

我想要的第一列表[1,2,3]是first_list和[4,5,6]成为second_list。我怎样才能做到这一点?

+0

要么使用字符串格式,或者使用某种形式的'eval'(极度危险 - 这是用户输入! )。所以 - 使用一个列表的字符串格式('example.py 1,2,3 3,4,5')。 –

+0

@ReutSharabani我不能这样做,程序将按照我的问题进行测试。 – Julia

+0

你可以使用'ast.literal_eval'。 'eval'对于只有你会运行的测试程序来说可能是很好的。 –

回答

1
import ast 
import sys 

for arg in sys.argv: 
    try: 
     print sum(ast.literal_eval(arg)) 
    except: 
     pass 

在命令行:

>>= python passListAsCommand.py "[1,2,3]" 
    6 

要小心,不要经过任何恶意至literal_eval

0
import sys 
def command_list(): 
    l = [] 
    if len(sys.argv) > 1: 
     for i in sys.argv[1:]: 
      l.append(i) 
    return l 
print(command_list()) 

在命令行

$ python3 test105.py 1,2,3 4,5,6 
['1,2,3', '4,5,6'] 
+0

我不认为这是OP所要做的,''1,2,3''仍然是一个字符串(而不是一个列表) –

1

[可能是一个壳元字符。您可以删除[]@Reut Sharabani suggested

$ python example.py 1,2,3 4,5,6 

这是很容易解析这样的格式:

#!/usr/bin/env python3 
import sys 

def arg2int_list(arg): 
    """Convert command-line argument into a list of integers. 

    >>> arg2int_list("1,2,3") 
    [1, 2, 3] 
    """ 
    return list(map(int, arg.split(','))) 

print(*map(arg2int_list, sys.argv[1:])) 
# -> [1, 2, 3] [4, 5, 6] 
相关问题