我使用Python创建项目设置,但需要帮助获取命令行参数。
我在终端上尝试了以下命令:
$python myfile.py var1 var2 var3
在我的Python文件中,我想使用所有的输入变量。我使用Python创建项目设置,但需要帮助获取命令行参数。
我在终端上尝试了以下命令:
$python myfile.py var1 var2 var3
在我的Python文件中,我想使用所有的输入变量。Python教程中有解释:
import sys
print(sys.argv)
更具体地说,如果你运行 python example.py one two three
:
>>> import sys
>>> print(sys.argv)
['example.py', 'one', 'two', 'three']
我强烈推荐使用 Python 2.7 及以后版本内置的 argparse
模块。
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
parser.add_argument('var3', nargs='?', type=int, default=3)
var3是一个可选参数,如果您在命令行中没有指定值,则可以在代码中访问var3,默认值为3。 - Albicocco(不包括Python文件的名称)
import sys
sys.argv[1:]
[1:]
是一个 slice ,从第二个元素(索引为 1)开始,一直到参数列表的末尾。这是因为第一个元素是 Python 文件的名称,我们想要删除它。
[1:]
的意思是从列表、字符串或其他序列中的第二个元素开始获取到最后一个元素,不包括第一个元素。 - Kellen Stuartsys.argv
时,需要将第二个参数[1:]
向上移动一位,因为sys.argv
的第一个参数默认是你正在运行的Python文件的名称,例如testrun.py
。请注意,这并不改变原始含义。 - Samuel NdePython 代码:
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
你可以使用sys.argv
将参数作为列表获取。
如果您需要访问单个元素,可以使用
sys.argv[i]
其中i
是索引,0
将给出正在执行的Python文件名。此后的任何索引都是传递的参数。
您可以使用“argparse”按键访问参数。
假设我们有这个命令:
python main.py --product_id 1001028
要访问参数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)
输出:
1001028
$ python myfile.py var1 var2 var3
import sys
var1 = sys.argv[1]
var2 = sys.argv[2]
var3 = sys.argv[3]
sys.argv[0]
,它始终是当前工作目录。sys.argv[0]
不是当前工作目录,而是正在执行的文件的名称。 - look我可以想到一些额外的东西。
正如 @allsyed 所说,sys.argv 给出了一个组件列表(包括程序名称),因此,如果您想知道通过命令行传递的元素数,可以使用 len() 来确定它。基于此,您可以设计异常/错误消息,如果用户没有传递特定数量的参数。
另外,如果您正在寻找更好的处理命令行参数的方法,我建议您查看 https://docs.python.org/2/howto/argparse.html
sys - 系统特定的参数和函数。
该模块提供了对解释器使用和维护的某些变量以及与解释器强烈交互的函数的访问。该模块仍然可用。如果该模块不再有效,我将编辑此帖子。
然后,您可以在此处打印参数的数量或您想要的任何内容,包括参数列表。
请按照以下脚本:
#!/usr/bin/python
import sys
print 'Number of arguments entered :' len(sys.argv)
print 'Your argument list :' str(sys.argv)
然后,运行您的Python脚本:
$ python arguments_List.py chocolate milk hot_Chocolate
您将会得到您所询问的结果:
Number of arguments entered : 4
Your argument list : ['arguments_List.py', 'chocolate', 'milk', 'hot_Chocolate']
import sys
if len(sys.argv) <= 1:
print("No arguments were given")
else:
for arg in sys.argv:
print(arg)
AttributeError: 模块'sys'没有属性'args'
- Breno Leitão