Python将用户参数作为列表
我已经编写了一个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
#!/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
一样危险。