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

Par*_*ser 328 python command-line

我使用python来创建我的项目设置设置,但我需要帮助获取命令行参数.

我在终端试了这个:

$python myfile.py var1 var2 var3
Run Code Online (Sandbox Code Playgroud)

在我的Python文件中,我想使用所有输入的变量.

Sil*_*ost 454

Python教程解释了它:

import sys

print(sys.argv)
Run Code Online (Sandbox Code Playgroud)

更具体地说,如果您运行python example.py one two three:

>>> import sys
>>> print(sys.argv)
['example.py', 'one', 'two', 'three']
Run Code Online (Sandbox Code Playgroud)

  • Dooh,得到了它(sys.argv [1]):D (92认同)
  • 坦克,但现在我需要使用我的var1?这里发生了什么...... :) (7认同)

Rya*_*ley 105

import sys

sys.argv[1:]
Run Code Online (Sandbox Code Playgroud)

会给你一个参数列表(不包括python文件的名称)

  • @KolobCanyon意味着"从索引1开始直到结束",即跳过第一个元素 (7认同)
  • 什么`[1:]`是什么意思? (5认同)
  • @KolobCanyon 将第二个参数 `[1:]` 向上,因为 `sys.argv` 的第一个参数默认是您正在运行的 python 文件的名称,例如 `testrun.py`。 (2认同)
  • @einpoklum 我愿意接受输入,因为这些天我不写很多 Python 代码,但是[我雇主的 Python 风格指南](https://google.github.io/styleguide/pyguide.html#22-imports )确实建议以这种方式使用导入。 (2认同)

Mic*_*ner 85

我强烈推荐argparse使用Python 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)
Run Code Online (Sandbox Code Playgroud)

和输出 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
Run Code Online (Sandbox Code Playgroud)

python prog.py 1你所期望的:

2
Run Code Online (Sandbox Code Playgroud)

  • 质量答案,不确定为什么这里的任何人会使用这里给出的任何其他方法.*特别*因为它内置!难道你们没有比解析更好的事情吗? (6认同)
  • 要使用默认值,在命令行中没有特定值,您可以使用类似以下内容: `parser.add_argument('var3', nargs='?', type=int, default=3)` var3 是一个可选参数,如果你没有在命令行中指定一个值,你可以在你的代码中访问var3,var3的默认值=3 (5认同)
  • 只是提一下您应该如何访问 args 命名空间中的特定参数: args.counter (2认同)
  • @Bassinator 在不需要解析参数的情况下。 (2认同)

Cha*_* P. 51

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
Run Code Online (Sandbox Code Playgroud)

调用:

$python myfile.py var1 var2 var3
Run Code Online (Sandbox Code Playgroud)

输出:

Params= var1 var2 var3 
Run Code Online (Sandbox Code Playgroud)


all*_*yed 22

您可以使用sys.argv将参数作为列表来获取.

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

sys.argv[i]  
Run Code Online (Sandbox Code Playgroud)

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


Moh*_*day 20

您可以使用“argparse”按键访问参数。

假设我们有这个命令:

python main.py --product_id 1001028
Run Code Online (Sandbox Code Playgroud)

要访问参数product_id,我们需要先声明它,然后获取它:

import argparse


parser = argparse.ArgumentParser()
parser.add_argument('--product_id', dest='product_id', type=str, help='Add product_id')
args = parser.parse_args()

print (args.product_id)
Run Code Online (Sandbox Code Playgroud)

输出:

1001028
Run Code Online (Sandbox Code Playgroud)


小智 6

首先,您需要导入sys

sys - 系统特定的参数和函数

该模块提供对解释器使用和维护的某些变量以及与解释器强烈交互的函数的访问。该模块仍然可用。如果该模块不再工作,我将编辑这篇文章。

然后,您可以打印参数的数量或您想要的参数列表。

请按照以下脚本操作:

#!/usr/bin/python

import sys

print 'Number of arguments entered :' len(sys.argv)

print 'Your argument list :' str(sys.argv)
Run Code Online (Sandbox Code Playgroud)

然后,运行你的 python 脚本:

$ python arguments_List.py chocolate milk hot_Chocolate
Run Code Online (Sandbox Code Playgroud)

您将得到您所要求的结果:

Number of arguments entered : 4
Your argument list : ['arguments_List.py', 'chocolate', 'milk', 'hot_Chocolate']
Run Code Online (Sandbox Code Playgroud)

希望对某人有所帮助。


小智 5

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

import sys

var1 = sys.argv[1]
var2 = sys.argv[2]
var3 = sys.argv[3]
Run Code Online (Sandbox Code Playgroud)

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

  • sys.argv [0]不是当前的工作目录。它是正在执行的文件的名称。 (3认同)

Roh*_*ale 5

我能想到的一些额外的事情。

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

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