使用命令行参数和 argv
每当从命令行调用 Python 脚本时,用户可以提供其他命令行参数,这些参数将传递给脚本。这些参数将由系统变量 sys.argv
提供给程序员(argv
是大多数编程语言中使用的传统名称,它表示“ arg ument v ector”)。
按照惯例,sys.argv
列表中的第一个元素是 Python 脚本本身的名称,而其余元素是用户在调用脚本时传递的标记。
# cli.py
import sys
print(sys.argv)
$ python cli.py
=> ['cli.py']
$ python cli.py fizz
=> ['cli.py', 'fizz']
$ python cli.py fizz buzz
=> ['cli.py', 'fizz', 'buzz']
这是如何使用 argv
的另一个例子。我们首先剥离 sys.argv 的初始元素,因为它包含脚本的名称。然后我们将其余参数组合成一个句子,最后打印该句子,前面加上当前登录用户的名称(以便模拟聊天程序)。
import getpass
import sys
words = sys.argv[1:]
sentence = " ".join(words)
print("[%s] %s" % (getpass.getuser(), sentence))
当手动解析许多非位置参数时常用的算法是迭代 sys.argv
列表。一种方法是遍历列表并弹出它的每个元素:
# reverse and copy sys.argv
argv = reversed(sys.argv)
# extract the first element
arg = argv.pop()
# stop iterating when there's no more args to pop()
while len(argv) > 0:
if arg in ('-f', '--foo'):
print('seen foo!')
elif arg in ('-b', '--bar'):
print('seen bar!')
elif arg in ('-a', '--with-arg'):
arg = arg.pop()
print('seen value: {}'.format(arg))
# get the next value
arg = argv.pop()