Python基于在命令行上传递的sys.argv执行if / else语句

时间:2016-06-14 15:56:16

标签: python if-statement sys

我是Python新手,语法真的让我失望。我需要执行一个脚本,我希望根据命令行传递的参数执行一个函数。以下是伪代码:

import sys

...
Code
Authentication
Role Validation 
...

Arg[1]
Arg[2]
Arg[3]

if(Arg[3] !exist)
  execute Func1 with Arg[1] & Arg[2]
else if 
  execute Func 2 with Arg[1], [2] & [3]

有人可以指导我如何在Python的世界中构建它,或者是否还有其他方法可以做到这一点?

4 个答案:

答案 0 :(得分:3)

如果您必须使用sys.argv,它只是普通的Python list,您可以使用len来检查传递的参数数量(请记住,0 th元素是程序本身。)

if len(sys.argv) == 3:
    func1(*sys.argv[1:3])  # * unpacking removes repeated references to sys.argv
elif len(sys.argv) == 4:
    func2(*sys.argv[1:4])

我建议查看类似the argparse module的内容;这需要学习更多的工作,但这意味着您的脚本会自动获得-h/--help支持,这使得使用脚本变得更加容易,而无需单独实现使用消息,从而使其失去同步的风险。

或者,如果您准备使用第三方软件包,docopt通常会被视为argparse的替代方案。

答案 1 :(得分:1)

我相信这就是你要找的东西。 sys.argv是包含命令行参数的列表。 sys.argv[0]通常是您运行的命令,因此您对之后的命令感兴趣。

if len(sys.argv) == 4:
    execute Func 2 with sys.argv[1], sys.argv[2] & sys.argv[3]
elif len(sys.argv) == 3:
    execute Func1 with sys.argv[1] & sys.argv[2]

答案 2 :(得分:1)

sys.argv将为您提供使用e调用脚本的参数。 G。如果您像这样运行脚本:

pytohn script.py arg1 arg2

sys.argv将是:

["script.py", "arg1", "arg2"]

内置len函数也将返回数组的长度。因此,对于上面的示例,len应为3

了解这一点,您应该能够编写代码。

如果你努力让这个工作在这里是一个暗示:

import sys
arg = sys.argv

if len(arg) == 3:
    func1(arg[1], arg[2])

elif len(arg) == 4:
    func2(arg[1], arg[2], arg[3])

答案 3 :(得分:1)

最简单的做法就是查看sys.argv

给出的列表长度
import sys

def func1(a, b):
    print "func1", a, b

def func2(a, b, c):
    print "func2", a, b, c

if __name__ =='__main__':
    if len(sys.argv) == 3:
        func1(sys.argv[1], sys.argv[2])
    elif len(sys.argv) == 4:
        func2(sys.argv[1], sys.argv[2], sys.argv[3])

你似乎注意到第一个arg是程序本身。 想想如果传递错误数量的参数会发生什么。 请查看argparse module