在 Python 中,可以使用 sys
模块的 argv
属性来访问命令行参数。sys.argv
是一个列表,其中第一个元素是程序本身的名称,其余元素是传递给程序的参数。
例如,假设有一个名为 my_program.py
的程序,你想在命令行中运行它并传递两个参数,如下所示:
python my_program.py arg1 arg2
在 my_program.py
中,你可以访问这些参数如下所示:
import sys
print(sys.argv)
这将输出一个列表,其中包含程序本身的名称和两个参数:
['my_program.py', 'arg1', 'arg2']
你可以使用索引访问列表中的每个元素,例如:
import sys
# 访问第一个参数(程序本身的名称)
print(sys.argv[0])
# 访问第二个参数(arg1)
print(sys.argv[1])
# 访问第三个参数(arg2)
print(sys.argv[2])
注意:sys.argv
中的第一个元素始终是程序本身的名称,因此参数从 sys.argv[1]
开始。
使用 argparse
模块可以更简单地解析命令行参数。下面是一个简单的示例:
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("--foo", help="foo help")
parser.add_argument("--bar", help="bar help")
args = parser.parse_args()
if args.foo:
print(args.foo)
if args.bar:
print(args.bar)
在这个示例中,我们定义了两个命令行参数:--foo
和 --bar
。这些参数是可选的,并且每个都有一个简短的描述。然后,我们使用 parse_args
方法解析参数。最后,我们检查 args
对象是否包含我们定义的参数,并在存在时打印出来。
在命令行中运行这个程序的方式如下所示:
python my_program.py --foo value1 --bar value2
在这种情况下,程序将输出以下内容:
value1
value2
你也可以使用 argparse
定义必需的参数,并为参数提供默认值。例如:
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("--foo", required=True, help="foo help")
parser.add_argument("--bar", default=10, help="bar help")
args = parser.parse_args()
print(args.foo)
print(args.bar)
在这个示例中,--foo
是一个必需的参数,而 --bar
是一个可选参数,其默认值为 10。
你也可以使用 argparse
定义带有多个值的参数,例如:
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("--numbers", nargs="+", help="list of numbers")
args = parser.parse_args()
print(args.numbers)
在这个示例中,我们定义了一个名为 --numbers
的参数,并使用 nargs
参数设置为 "+"
。这意味着这个参数可以接受一个或多个数字。
在命令行中运行这个程序的方式如下所示:
python my_program.py --numbers 1 2 3 4 5
在这种情况下,程序将输出以下内容:
['1', '2', '3', '4', '5']
注意,args.numbers
是一个列表,其中包含所有传递给 --numbers
参数的值。
你也可以使用 argparse
定义带有多个值的参数,并使用类型转换函数将这些值转换为指定的类型。例如:
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("--numbers", nargs="+", type=int, help="list of numbers")
args = parser.parse_args()
print(args.numbers)
在这个示例中,我们使用 type
参数将 --numbers
参数转换为整数。这意味着如果在命令行中传递了字符串,将引发异常。
在命令行中运行这个程序的方式如下所示:
python my_program.py --numbers 1 2 3 4 5
除了定义带有多个值的参数之外,你还可以使用 argparse
模块定义带有选项的参数。例如:
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("--verbose", "-v", action="store_true", help="increase output verbosity")
args = parser.parse_args()
if args.verbose:
print("Verbosity turned on")
在这个示例中,我们定义了一个名为 --verbose
的参数,并使用 action
参数设置为 "store_true"
。这意味着如果在命令行中使用了 --verbose
选项,那么 args.verbose
将设置为 True
。
在命令行中运行这个程序的方式如下所示:
python my_program.py --verbose
在这种情况下,程序将输出以下内容:
Verbosity turned on
你也可以使用 argparse
定义带有选项的参数,并使用短名称来访问这些参数。例如,在上面的示例中,我们使用了 -v
参数定义了一个短名称。这意味着你可以在命令行中使用 -v
代替 --verbose
:
python my_program.py -v
你也可以使用 argparse
定义带有选项的参数,并为选项提供默认值。例如:
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("--verbose", "-v", action="store_true", default=False, help="increase output verbosity")
args = parser.parse_args()
if args.verbose:
print("Verbosity turned on")
在这个示例中,我们为 --verbose
选项提供了一个默认值 False
。这意味着如果你在命令行中没有使用 --verbose
选项,那么 args.verbose
也将设置为 False
。
在命令行中运行这个程序的方式如下所示:
python my_program.py
在这种情况下,程序不会输出任何内容,因为 args.verbose
被设置为 False
。
你也可以使用 argparse
定义带有选项的参数,并提供可供用户选择的多个值。例如:
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("--level", "-l", choices=["debug", "info", "warning", "error"], help="logging level")
args = parser.parse_args()
print(args.level)
在这个示例中,我们定义了一个名为 --level
的参数,并使用 choices
参数设置为可以接受的值的列表。
在命令行中运行这个程序的方式如下所示:
python my_program.py --level warning
在这种情况下,程序将输出以下内容:
warning
如果用户在命令行中输入了不在 choices
列表中的值,则将引发异常。
你还可以使用 argparse
定义带有选项的参数,并提供自定义帮助信息。例如:
import argparse
parser = argparse.ArgumentParser(description="My program description")
parser.add_argument("--foo", help="foo help")
args = parser.parse_args()
print(args.foo)
在这个示例中,我们定义了一个名为 --foo
的参数,并使用 help
参数为参数提供了一个简短的描述。
在命令行中运行这个程序的方式如下所示:
python my_program.py --foo bar
在这种情况下,程序将输出以下内容:
bar
你还可以在命令行中使用 -h
或 --help
参数来获取帮助信息。
例如:
python my_program.py -h
将输出以下内容:
usage: my_program.py [-h] [--foo FOO]
My program description
optional arguments:
-h, --help show this help message and exit
--foo FOO foo help
由上可知,Python 命令行参数可以让你在程序运行时从命令行传递参数。这可以使你的程序更灵活,可以根据需要进行调整。
例如,你可以使用命令行参数来指定程序的输入文件,输出文件,日志级别等。
使用 Python 命令行参数的一种常见方法是使用 argparse
模块。你可以使用它来定义带有选项的参数,带有多个值的参数,并提供自定义的帮助信息。
你还可以使用其他库,例如 docopt
来解析更复杂的命令行参数。
总的来说,Python 命令行参数可以让你的程序更灵活,