ChatGPT解决这个技术问题 Extra ChatGPT

如何访问命令行参数?

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

我在终端上试过这个:

$python myfile.py var1 var2 var3

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


y
yiwei

Python tutorial explains it

import sys

print(sys.argv)

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

>>> import sys
>>> print(sys.argv)
['example.py', 'one', 'two', 'three']

R
Ryan M

仅获取命令行参数

(不包括 Python 文件的名称)

import sys

sys.argv[1:]

[1:] 是一个 slice,从第二个元素(索引 1)开始,一直到参数列表的末尾。这是因为第一个元素是 Python 文件的名称,我们想要删除它。


[1:] 是什么意思?
@KolobCanyon 它的意思是“从索引 1 到结尾取一个子列表”,即跳过第一个元素
@KolobCanyon 将第二个参数 [1:] 向上取,因为 sys.argv 的第一个参数默认是您正在运行的 python 文件的名称,例如 testrun.py
M
Michael Dorner

我强烈推荐 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

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

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 

R
Rakete1111

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

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

sys.argv[i]  

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


l
lvadim01

如果您这样称呼它:$ 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] 不是当前工作目录。它是正在执行的文件的名称。
R
Rohan

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

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

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


M
Mohamad Hamouday

您可以使用“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

佚名

首先,您需要导入 sys

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']

希望对某人有所帮助。


佚名

应该使用 sys(system) 模块。参数具有 str 类型并且在数组中

注意:argv 不是函数或类,并且是可变的并且可以更改

注意:argv[0] 是文件名

注意:因为 python 用 c 编写,C 有 main(int argc , char *argv[]);但 sys 模块中的 argc 不退出

注意:sys 模块被命名为 System 并用 C 语言编写,它不是基于源的模块

from sys import argv # or
from sys import * # or
import sys 

# code
print("is list") if type(sys.argv) == list else pass #  is list ,or
print("is list") if type(argv) == list else pass # is list
# arguments are str ( string )
print(type(sys.argv[1])) # str
# command : python filename.py 1 2 3
print(len(sys.argv)) # 3
print(sys.argv[1],'\n',sys.argv[2]'\n',sys.argv[3]) # following
'''
1
2
3
'''
# command : python filename.py 123
print(len(sys.argv)) # 1
print(sys.argv[1]) # following
'''
123
'''