如何在Python中访问命令行参数?


Answers:



115
import sys

sys.argv[1:]

将为您提供参数列表(不包括python文件的名称)


5
什么[1:]意思
Kolob Canyon '18

8
@KolobCanyon的意思是“从索引1开始到结束使用一个子列表”,即跳过第一个元素
Kamil Jarosz,

@KolobCanyon将第二个参数[1:]向上,因为sys.argv默认情况下,第一个参数是您正在运行的python文件的名称testrun.py
塞缪尔·恩德

94

我强烈建议argparsePython 2.7及更高版本随附。

argparse模块减少了样板代码,并使您的代码更健壮,因为该模块可以处理所有标准用例(包括子命令),为您生成帮助和用法,检查并清理用户输入-您在使用时需要担心的所有事情正在使用sys.argv方法。它是免费的(内置)。

这里有个小例子:

import argparse

parser = argparse.ArgumentParser("simple_example")
parser.add_argument("counter", help="An integer will be increased by 1 and printed.", type=int)
args = parser.parse_args()
print(args.counter + 1)

和输出为 python prog.py -h

usage: simple_example [-h] counter

positional arguments:
  counter     counter will be increased by 1 and printed.

optional arguments:
  -h, --help  show this help message and exit

python prog.py 1您所期望的:

2

7
质量的答案,不是很确定为什么这里的任何人都会使用这里给出的任何其他方法。特别是因为它是内置的!你们有比解析更好的事情吗?
Bassinator's

仅提及您应该如何访问args命名空间中的特定参数:args.counter
MikeL

1
@Bassinator在不需要解析参数的情况下。
减少活动

要使用默认值,而在命令行中没有特定值,则可以使用类似以下内容的内容:parser.add_argument('var3', nargs='?', type=int, default=3)var3是可选参数,如果您未在命令行中指定值,则可以在代码中访问var3,var3的默认值= 3
Albicocco

56

Python代码:

import sys

# main
param_1= sys.argv[1] 
param_2= sys.argv[2] 
param_3= sys.argv[3]  
print 'Params=', param_1, param_2, param_3

调用:

$python myfile.py var1 var2 var3

输出:

Params= var1 var2 var3 

24

您可以使用 sys.argv用来获取参数列表。

如果您需要访问各个元素,则可以使用

sys.argv[i]  

i索引在哪里,0将为您提供正在执行的python文件名。之后的任何索引都是传递的参数。


6

如果您这样称呼它: $ python myfile.py var1 var2 var3

import sys

var1 = sys.argv[1]
var2 = sys.argv[2]
var3 = sys.argv[3]

与数组类似,您也拥有sys.argv[0]始终是当前工作目录的数组。


6
sys.argv[0]不是当前的工作目录。它是正在执行的文件的名称。
请看

5

我可以想到的一些其他事项。

正如@allsyed所说,sys.argv提供了一个组件列表(包括程序名称),因此,如果您想知道通过命令行传递的元素数量,可以使用len()来确定它。基于此,如果用户未传递特定数量的参数,则可以设计异常/错误消息。

另外,如果您正在寻找一种更好的方式来处理命令行参数,我建议您查看https://docs.python.org/2/howto/argparse.html

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.