如何检查是否设置了命令行中的参数?

How to check if an argument from commandline has been set?

提问人:Richard Knop 提问时间:11/16/2010 更新时间:4/29/2022 访问量:122492

问:

我可以这样称呼我的脚本:

python D:\myscript.py 60

在脚本中,我可以做:

arg = sys.argv[1]
foo(arg)

但是,我如何测试是否已在命令行调用中输入了参数?我需要做这样的事情:

if isset(sys.argv[1]):
    foo(sys.argv[1])
else:
    print "You must set argument!!!"

评论

0赞 Jim 11/16/2010
检查 argv[1] 是否为 null,对不起,我以为我在谈论参数 1 是隐含的。
1赞 khachik 11/16/2010
@Jim 不是 null,它至少包含脚本的名称sys.argvsys.argv[0]

答:

-10赞 J V 11/16/2010 #1

if(sys.argv[1]):应该可以正常工作,如果没有参数 sys.argv[1] 将(应该)为 null

评论

3赞 GWW 11/16/2010
如果未设置该值,则将给出列表索引越界错误。
0赞 khachik 11/16/2010
它会随着IndexError
73赞 khachik 11/16/2010 #2
import sys
len( sys.argv ) > 1
30赞 chris 11/16/2010 #3
if len(sys.argv) < 2:
    print "You must set argument!!!"
65赞 Katriel 11/16/2010 #4

不要用于处理命令行界面;有一个模块可以做到这一点:argparsesys.argv

您可以通过传递给 来将参数标记为必需。required=Trueadd_argument

import argparse
parser = argparse.ArgumentParser(description='Process some integers.')
parser.add_argument("foo", ..., required=True)
parser.parse_args()

评论

20赞 Jonik 11/16/2010
如果需求很简单,那么使用真的有问题吗?sys.argv
1赞 Katriel 11/16/2010
@Jonik,不一定,但很少有理由使用它。就像正则表达式偶尔对解析 HTML 很有用一样,但很少有理由不使用 HTML 解析器。
4赞 geedoubleya 3/23/2017
-1 提供了一个在理查德的情况下行不通的例子。如果是,那么它将是一个位置,你不能添加到位置。foo60required=True
6赞 DNS 11/16/2010 #5

如果您使用的是 Python 2.7/3.2,请使用 argparse 模块。否则,请使用 optparse 模块。该模块负责解析命令行,您可以检查位置参数的数量是否符合您的预期。

0赞 Rafi 11/16/2010 #6

我为此使用 optparse 模块,但我想因为我使用的是 2.5,如果您使用的是 2.7 或更高版本,您可以按照 Alex 的建议使用 argparse

2赞 Valentinos Ioannou 8/21/2014 #7
for arg in sys.argv:
    print (arg)  
    #print cli arguments

您可以使用它来将参数存储在列表中并使用它们。是比这样使用它们更安全的方法sys.argv[n]

如果没有给出参数,则没有问题

8赞 Miguel Armenta 8/15/2018 #8
if len(sys.argv) == 1:
   print('no arguments passed')
   sys.exit()

这将检查是否传递了任何参数。如果没有参数,它将退出脚本,而不运行其余部分。

评论

0赞 bohrax 8/15/2018
感谢您的回答!请注意,已经有其他与此非常相似的答案。
2赞 Enrique Pérez Herrero 10/20/2021 #9

此脚本使用异常:IndexError

try:
    print(sys.argv[1])
except IndexError:
    print("Empty argument")