Python将用户参数作为列表

Python将用户参数作为列表,python,Python,我已经编写了一个python脚本来从用户那里获取输入,但是用户输入被用“,”分开。我不想修改用户输入 #!/usr/bin/python import argparse parser = argparse.ArgumentParser() parser.add_argument("-f","--file_name", type=str) parser.add_argument("-i", "--ingress",type=list) args = parser.parse_args() prin

我已经编写了一个python脚本来从用户那里获取输入,但是用户输入被用“,”分开。我不想修改用户输入

#!/usr/bin/python
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("-f","--file_name", type=str)
parser.add_argument("-i", "--ingress",type=list)
args = parser.parse_args()
print args.file_name
print args.ingress
print(type(args.ingress))
输出:

./input_parse.py -f output.txt -i [["1,2,3,4"],80,90,"tcp"]
output.txt
['[', '[', '1', ',', '2', ',', '3', ',', '4', ']', ',', '8', '0', ',', '9', '0', ',', 't', 'c', 'p', ']']
<type 'list'>
/input\u parse.py-f output.txt-i[[“1,2,3,4”],80,90,“tcp”]
output.txt
['['、'['、'1'、'、'2'、'、'、'3'、'、'、'4'、']、'、'、'8'、'0'、'、'、'9'、'0'、'、'、't'、'c'、'p'、'等]]
预期产出:

output.txt
[["1,2,3,4"],80,90,"tcp"]
<type 'list'>
output.txt
[“1,2,3,4”]、80,90、“tcp”]

稍后,我需要迭代列表并获取列表[0]、列表[1]等等。

参数解析器将所有内容作为字符串,然后应用您在输入中指定的
类型。如果您确实需要传递列表,只需将其转换回
str
,并使用辅助函数将其转换为列表:

备选案文1: 你可以这样做:

#!/usr/bin/python
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("-f","--file_name", type=str)
parser.add_argument("-i", "--ingress",type=str)
args = parser.parse_args()
print args.file_name
print args.ingress
print(type(args.ingress))

def helper(x):
        l = x.split('|')
        ll = [[l[0]]]+l[1].split(',')
        ll[1], ll[2] = int(ll[1]), int(ll[2])
        return ll

args.ingress = helper(args.ingress)
print args.ingress 
print type(args.ingress)
python /tmp/test.py -f output.txt -i "1,2,3,4|80,90,tcp"
python /tmp/test.py -f output.txt -i [["1,2,3,4"],80,90,"tcp"]
然后像这样传递论点:

#!/usr/bin/python
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("-f","--file_name", type=str)
parser.add_argument("-i", "--ingress",type=str)
args = parser.parse_args()
print args.file_name
print args.ingress
print(type(args.ingress))

def helper(x):
        l = x.split('|')
        ll = [[l[0]]]+l[1].split(',')
        ll[1], ll[2] = int(ll[1]), int(ll[2])
        return ll

args.ingress = helper(args.ingress)
print args.ingress 
print type(args.ingress)
python /tmp/test.py -f output.txt -i "1,2,3,4|80,90,tcp"
python /tmp/test.py -f output.txt -i [["1,2,3,4"],80,90,"tcp"]
输出将与您期望的一样:

output.txt
1,2,3,4|80,90,tcp
<type 'str'>
[['1,2,3,4'], 80, 90, 'tcp']
<type 'list'>
你这样称呼它:

#!/usr/bin/python
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("-f","--file_name", type=str)
parser.add_argument("-i", "--ingress",type=str)
args = parser.parse_args()
print args.file_name
print args.ingress
print(type(args.ingress))

def helper(x):
        l = x.split('|')
        ll = [[l[0]]]+l[1].split(',')
        ll[1], ll[2] = int(ll[1]), int(ll[2])
        return ll

args.ingress = helper(args.ingress)
print args.ingress 
print type(args.ingress)
python /tmp/test.py -f output.txt -i "1,2,3,4|80,90,tcp"
python /tmp/test.py -f output.txt -i [["1,2,3,4"],80,90,"tcp"]
输出:

output.txt
[[1,2,3,4],80,90,tcp]
<type 'str'>
[['1,2,3,4'], 80, 90, 'tcp']
<type 'list'>
output.txt
[["1,2,3,4"],80,90,"tcp"]
<type 'str'>
[['1,2,3,4'], 80, 90, 'tcp']
<type 'list'>
电话:

python /tmp/test.py -f output.txt -i '[["1,2,3,4"],80,90,"tcp"]'
输出:

output.txt
[[1,2,3,4],80,90,tcp]
<type 'str'>
[['1,2,3,4'], 80, 90, 'tcp']
<type 'list'>
output.txt
[["1,2,3,4"],80,90,"tcp"]
<type 'str'>
[['1,2,3,4'], 80, 90, 'tcp']
<type 'list'>
output.txt
[“1,2,3,4”]、80,90、“tcp”]
[1,2,3,4'],80,90,'tcp']

将类型更改回
str
type=list
对加载的字符串进行Python调用
list()
,并且
list('foo')
返回所有字符的列表。不,它不起作用!type=list做的事情和list('foo')@pokeThat是我说的。请再次阅读我的评论。
>name=“Suresh”>>>打印(列表(名称))['S'、'u'、'r'、'e'、'S'、'h']
如果您将
eval
替换为
ast.literal\u eval
,它将变得不危险,而且(在我看来)是最好的解决方案。为什么要提到
eval
?或者,至少语法应该更新,因为它听起来像
literal\u eval
eval
一样危险。