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

Python execute if/else statement based on sys.argv passed on Command Line

我是 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 的世界中构造它,或者是否有任何其他方法可以做到这一点?

如果你一定要用sys.argv,那只是一个普通的Python list,你可以在上面用len来检查传递了多少个参数(记住,第 0 个元素是程序本身。

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 的替代品。

我相信这就是您要找的。 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]

sys.argv 将为您提供调用脚本的参数,例如如果你 运行 你的脚本是这样的:

python script.py arg1 arg2

sys.argv 将是:

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

此外,内置的 len 函数将 return 数组的长度。所以对于上面的例子 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])

做你所要求的最简单的事情可以查看 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])

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