刚开始学习 python 并尝试将命令行选项传递给 python 脚本。我正在尝试连接两个或多个参数并将其传递给字符串变量,
例如,
myscript.py http://www.domain.com 1234
将其放入一个名为 的字符串变量中url
,该变量的值应为“ http://www.domain.com:1234 ”
我不太确定如何存档。使用一些字符串操作非常简单raw_input
,但我想知道这是否也可以完成argparse
。
刚开始学习 python 并尝试将命令行选项传递给 python 脚本。我正在尝试连接两个或多个参数并将其传递给字符串变量,
例如,
myscript.py http://www.domain.com 1234
将其放入一个名为 的字符串变量中url
,该变量的值应为“ http://www.domain.com:1234 ”
我不太确定如何存档。使用一些字符串操作非常简单raw_input
,但我想知道这是否也可以完成argparse
。
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('server') # first positional argument
parser.add_argument('port') # second positional argument
args = parser.parse_args()
url = '%s:%s' % (args.server, args.port)
print url
argparse 是解决它的一种方法,但如果你只是在学习(YMMV),可能会有点矫枉过正。
如果您导入sys
模块,则传递给您的命令行参数在字符串列表中可用sys.argv
import sys
if len(sys.argv) < 3:
print "Not enough args!"
sys.exit(0)
# sys.argv[0] is the name of your script, the rest are parameters
url = "%s:%s" % (sys.argv[1], sys.argv[2])
print url
为什么不做,
argstring = ':'.join(args[1:])
如果您想从命令行输入带有字符串http://www.domain.com:1234的变量,请执行以下操作:
if len(sys.argv) >= 3:
result = '%s:%s' % tuple(sys.argv[1:3])
对“url = '%s:%s' % (args.link, args.port)”这一行有点困惑,该行是否接受括号中的参数并将其添加到字符串变量 'url' 中?
实际上不再推荐这种格式。(见http://docs.python.org/tutorial/inputoutput.html)。使用当前推荐的方法执行相同操作的最简单方法是:-
url = '{0}:{1}'.format( args.link , args.port )
其中 {n} 是格式(变量)中的第 n 个变量。此方法将始终为您将参数转换为字符串。
使用 %s 的旧方法也是如此;'s' 的意思是将参数转换为字符串,但字符串中的 '%s' 标志必须与字符串后 % 符号后的参数一样多。不用担心这一点,但如果您正在学习,请使用 .format()。
谢谢琥珀,
这正是我想要的
#!/usr/bin/python
from urllib import urlopen
import argparse
usage='will be using it later'
parser=argparse.ArgumentParser(formatter_class=argparse.RawDescriptionHelpFormatter, description=usage, add_help=False)
parser.add_argument('link')
parser.add_argument('port')
args = parser.parse_args()
url = '%s:%s' % (args.link, args.port)
link = urlopen(url)
content=link.read()
print(content)
对“url = '%s:%s' % (args.link, args.port)”这一行有点困惑,该行是否接受括号中的参数并将其添加到字符串变量 'url' 中?
杰克