Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有没有办法在命令行中向Python程序输入列表?_Python_Python 3.x - Fatal编程技术网

有没有办法在命令行中向Python程序输入列表?

有没有办法在命令行中向Python程序输入列表?,python,python-3.x,Python,Python 3.x,我希望使用命令行将列表作为参数传递,例如: $python example.py [1,2,3] [4,5,6] 我希望第一个列表[1,2,3]是第一个列表,[4,5,6]是第二个列表。我该怎么做 import ast import sys for arg in sys.argv: try: print sum(ast.literal_eval(arg)) except: pass 在命令行中: >>= python pas

我希望使用命令行将列表作为参数传递,例如:

$python example.py [1,2,3] [4,5,6]
我希望第一个列表[1,2,3]是第一个列表,[4,5,6]是第二个列表。我该怎么做

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\u eval

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']

[
可能是shell元字符。您可以将
[]
作为以下内容删除:

解析这种格式很容易:

#!/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]

使用字符串格式或使用某种形式的
eval
(非常危险-这是用户输入!)。因此-使用列表的字符串格式(
example.py 1,2,3,4,5
)@ReutSharabani我不能这样做,程序将按照我的问题中所示进行测试。你可以使用
ast。literal_eval
eval
对于一个只有你才能运行的测试程序来说可能没问题。这意味着你必须解析输入。如果它只是一个字符串化列表,你可以在每个ar上使用
json
模块guments.我不确定
literal\u eval
提供的安全性,所以我不打算提供:-)有一个扩展的代码示例,使用ast.literal\u eval在命令行上向Python传递列表、dict和元组,请参见wolf的答案。我不认为这是OP试图做的,它仍然是一个字符串(而不是列表)
#!/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]