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