Python 列表的多个用户参数
Python multiple user arguments to a list
我无法用语言来感谢你们所有人提供的如此重要的建议。现在一切都开始变得有意义了。我为我错误的变量命名道歉。这只是因为我想快速学习,当我用自己的增强功能编写最终脚本时,我不会进行此类练习,将在此处 posted。
我想更进一步,将我们隔离的值(ip、端口和名称)传递给模板。我试过了,但即使我感觉很接近,也做不好。我要构建的文本如下所示。 (
Host Address:<IP>:PORT:<1>
mode tcp
bind <IP>:<PORT> name <NAME>
我已经在 rahul 提供的工作脚本中尝试了这个。(我已经按照 stackexchange 的规定编辑了我的原始代码。请也帮忙解决一次。非常感谢。
#!/usr/bin/python
import argparse
import re
import string
p = argparse.ArgumentParser()
p.add_argument("input", help="input the data in format ip:port:name", nargs='*')
args = p.parse_args()
kkk_list = args.input
def func_three(help):
for i in help:
print(i)
for kkk in kkk_list:
bb = re.split(":|,", kkk)
XXX=func_three(bb)
for n in XXX:
ip, port, name = n
template ="""HOST Address:{0}:PORT:{1}
mode tcp
bind {0}:{1} name {2}"""
sh = template.format(ip,port,name)
print sh
原始 post:--
这里是初学者。我写了下面的代码,但它并没有带我到任何地方。
#!/usr/bin/python
import argparse
import re
import string
p = argparse.ArgumentParser()
p.add_argument("INPUT")
args = p.parse_args()
KKK= args.INPUT
bb=re.split(":|,", KKK)
def func_three(help):
for i in help:
#print help
return help
#func_three(bb[0:3])
YY = var1, var2, var3 = func_three(bb[0:3])
print YY
运行这个脚本的方法应该是"script.py :"。即:script.py 192.168.1.10:80:string 172.25.16.2:100:string
如您所见,是否通过了一个论点我没有问题。但是当有更多参数时,我无法确定如何锻炼正则表达式并通过循环完成此操作。
所以回顾一下,这就是我希望输出看起来像进一步进行的方式。
192.168.1.10
80
name1
172.25.16.2
100
name2
如果有其他更好的方法可以实现,欢迎提出。
我会说你正在做的事情可以更简单地完成。如果您想在出现冒号时拆分输入,您可以使用:
#!/usr/bin/python
import sys
# sys.argv is the list of arguments you pass when you run the program
# but sys.argv[0] is the actual program name
# so you want to start at sys.argv[1]
for arg in sys.argv[1:]:
listVar = arg.split(':')
for i in listVar:
print i
# Optionally print a new line
print
抛开错误的变量名不谈,如果你想使用 argparse(我认为这是一个好习惯,即使它最初有点复杂)你应该使用 nargs='+'
选项:
#!/usr/bin/env python
import argparse
import re
import string
p = argparse.ArgumentParser()
p.add_argument("INPUT", nargs='+')
args = p.parse_args()
KKK= args.INPUT
def func_three(help):
for i in help:
#print help
return help
for kkk in KKK:
bb=re.split(":|,", kkk)
#func_three(bb[0:3])
YY = var1, var2, var3 = func_three(bb[0:3])
print YY
如果您查看 the documentation for argparse,您会注意到有一个 nargs
参数可以传递给 add_argument
,它允许您对多个输入进行分组。
例如:
p.add_argument('INPUT', nargs='+')
会做到至少有一个参数,但所有参数都将收集到一个列表中。
然后您可以像这样检查每个输入:
args = p.parse_args()
for address in args.INPUT:
ip, port = address.split(':')
请根据上下文命名您的变量。您将需要使用 nargs=*
来接受多个参数。我在下面添加了更新的代码,可以按您的需要打印。
#!/usr/bin/python
import argparse
import re
import string
p = argparse.ArgumentParser()
p.add_argument("input", help="input the data in format ip:port:name", nargs='*')
args = p.parse_args()
kkk_list = args.input # ['192.168.1.10:80:name1', '172.25.16.2:100:name3']
def func_three(help):
for i in help:
print(i)
for kkk in kkk_list:
bb = re.split(":|,", kkk)
func_three(bb)
print('\n')
# This prints
# 192.168.1.10
# 80
# name1
# 172.25.16.2
# 100
# name3
针对新要求
更新了代码
#!/usr/bin/python
import argparse
import re
import string
p = argparse.ArgumentParser()
p.add_argument("input", help="input the data in format ip:port:name", nargs='*')
args = p.parse_args()
kkk_list = args.input # ['192.168.1.10:80:name1', '172.25.16.2:100:name3']
def printInFormat(ip, port, name):
formattedText = '''HOST Address:{ip}:PORT:{port}
mode tcp
bind {ip}:{port} name {name}'''.format(ip=ip,
port=port,
name=name)
textWithoutExtraWhitespaces = '\n'.join([line.strip() for line in formattedText.splitlines()])
# you can break above thing
# text = ""
# for line in formattedText.splitlines():
# text += line.strip()
# text += "\n"
print(formattedText)
for kkk in kkk_list:
ip, port, name = re.split(":|,", kkk)
printInFormat(ip, port, name)
# HOST Address:192.168.1.10:PORT:80
# mode tcp
# bind 192.168.1.10:80 name name1
# HOST Address:172.25.16.2:PORT:100
# mode tcp
# bind 172.25.16.2:100 name name3
我无法用语言来感谢你们所有人提供的如此重要的建议。现在一切都开始变得有意义了。我为我错误的变量命名道歉。这只是因为我想快速学习,当我用自己的增强功能编写最终脚本时,我不会进行此类练习,将在此处 posted。
我想更进一步,将我们隔离的值(ip、端口和名称)传递给模板。我试过了,但即使我感觉很接近,也做不好。我要构建的文本如下所示。 (
Host Address:<IP>:PORT:<1>
mode tcp
bind <IP>:<PORT> name <NAME>
我已经在 rahul 提供的工作脚本中尝试了这个。(我已经按照 stackexchange 的规定编辑了我的原始代码。请也帮忙解决一次。非常感谢。
#!/usr/bin/python
import argparse
import re
import string
p = argparse.ArgumentParser()
p.add_argument("input", help="input the data in format ip:port:name", nargs='*')
args = p.parse_args()
kkk_list = args.input
def func_three(help):
for i in help:
print(i)
for kkk in kkk_list:
bb = re.split(":|,", kkk)
XXX=func_three(bb)
for n in XXX:
ip, port, name = n
template ="""HOST Address:{0}:PORT:{1}
mode tcp
bind {0}:{1} name {2}"""
sh = template.format(ip,port,name)
print sh
原始 post:--
这里是初学者。我写了下面的代码,但它并没有带我到任何地方。
#!/usr/bin/python
import argparse
import re
import string
p = argparse.ArgumentParser()
p.add_argument("INPUT")
args = p.parse_args()
KKK= args.INPUT
bb=re.split(":|,", KKK)
def func_three(help):
for i in help:
#print help
return help
#func_three(bb[0:3])
YY = var1, var2, var3 = func_three(bb[0:3])
print YY
运行这个脚本的方法应该是"script.py :"。即:script.py 192.168.1.10:80:string 172.25.16.2:100:string
如您所见,是否通过了一个论点我没有问题。但是当有更多参数时,我无法确定如何锻炼正则表达式并通过循环完成此操作。
所以回顾一下,这就是我希望输出看起来像进一步进行的方式。
192.168.1.10
80
name1
172.25.16.2
100
name2
如果有其他更好的方法可以实现,欢迎提出。
我会说你正在做的事情可以更简单地完成。如果您想在出现冒号时拆分输入,您可以使用:
#!/usr/bin/python
import sys
# sys.argv is the list of arguments you pass when you run the program
# but sys.argv[0] is the actual program name
# so you want to start at sys.argv[1]
for arg in sys.argv[1:]:
listVar = arg.split(':')
for i in listVar:
print i
# Optionally print a new line
print
抛开错误的变量名不谈,如果你想使用 argparse(我认为这是一个好习惯,即使它最初有点复杂)你应该使用 nargs='+'
选项:
#!/usr/bin/env python
import argparse
import re
import string
p = argparse.ArgumentParser()
p.add_argument("INPUT", nargs='+')
args = p.parse_args()
KKK= args.INPUT
def func_three(help):
for i in help:
#print help
return help
for kkk in KKK:
bb=re.split(":|,", kkk)
#func_three(bb[0:3])
YY = var1, var2, var3 = func_three(bb[0:3])
print YY
如果您查看 the documentation for argparse,您会注意到有一个 nargs
参数可以传递给 add_argument
,它允许您对多个输入进行分组。
例如:
p.add_argument('INPUT', nargs='+')
会做到至少有一个参数,但所有参数都将收集到一个列表中。
然后您可以像这样检查每个输入:
args = p.parse_args()
for address in args.INPUT:
ip, port = address.split(':')
请根据上下文命名您的变量。您将需要使用 nargs=*
来接受多个参数。我在下面添加了更新的代码,可以按您的需要打印。
#!/usr/bin/python
import argparse
import re
import string
p = argparse.ArgumentParser()
p.add_argument("input", help="input the data in format ip:port:name", nargs='*')
args = p.parse_args()
kkk_list = args.input # ['192.168.1.10:80:name1', '172.25.16.2:100:name3']
def func_three(help):
for i in help:
print(i)
for kkk in kkk_list:
bb = re.split(":|,", kkk)
func_three(bb)
print('\n')
# This prints
# 192.168.1.10
# 80
# name1
# 172.25.16.2
# 100
# name3
针对新要求
更新了代码#!/usr/bin/python
import argparse
import re
import string
p = argparse.ArgumentParser()
p.add_argument("input", help="input the data in format ip:port:name", nargs='*')
args = p.parse_args()
kkk_list = args.input # ['192.168.1.10:80:name1', '172.25.16.2:100:name3']
def printInFormat(ip, port, name):
formattedText = '''HOST Address:{ip}:PORT:{port}
mode tcp
bind {ip}:{port} name {name}'''.format(ip=ip,
port=port,
name=name)
textWithoutExtraWhitespaces = '\n'.join([line.strip() for line in formattedText.splitlines()])
# you can break above thing
# text = ""
# for line in formattedText.splitlines():
# text += line.strip()
# text += "\n"
print(formattedText)
for kkk in kkk_list:
ip, port, name = re.split(":|,", kkk)
printInFormat(ip, port, name)
# HOST Address:192.168.1.10:PORT:80
# mode tcp
# bind 192.168.1.10:80 name name1
# HOST Address:172.25.16.2:PORT:100
# mode tcp
# bind 172.25.16.2:100 name name3