使用命令行参数和 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()