Python基于在命令行上传递的sys.argv执行if/else语句
我是Python新手,语法真的让我很反感。我需要执行一个脚本,在这个脚本中,我希望根据在命令行上传递的参数执行一个函数。以下是伪代码:Python基于在命令行上传递的sys.argv执行if/else语句,python,if-statement,sys,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]
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列表,您可以在它上面使用len
来检查传递了多少个参数(记住,0
th元素是程序本身)
我建议你看看这样的东西;这需要学习更多的工作,但这意味着您的脚本将自动获得-h/--help
支持,这使得脚本的使用更加容易,而无需单独实现使用消息,从而有失去同步的风险
或者,如果您准备使用第三方软件包,通常被誉为是argparse
的替代品。如果您必须使用sys.argv
,那么它只是一个普通的Python列表
,您可以在它上面使用len
来检查传递了多少个参数(请记住,0
th元素是程序本身)
我建议看一下类似的东西;这需要学习更多的工作,但这意味着您的脚本会自动获得-h/--help
支持,这使得使用脚本更加容易,而无需单独实现用法消息,从而有失步的风险
或者,如果您准备使用第三方软件包,通常会被称赞为是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
是包含命令行参数的列表。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]
将为您获取调用脚本时使用的参数,例如,如果您这样运行脚本:
pytohn script.py arg1 arg2
sys.argv
将是:
["script.py", "arg1", "arg2"]
此外,内置函数将返回数组的长度。因此,对于上述示例,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])
将为您获取调用脚本时使用的参数,例如,如果您这样运行脚本:
pytohn script.py arg1 arg2
sys.argv
将是:
["script.py", "arg1", "arg2"]
此外,内置函数将返回数组的长度。因此,对于上述示例,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
做你想做的最简单的事情就是查看由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
你为什么要先做一些教程?听起来像是argparse的一个模型..用谷歌!LMGTFY修改@drum:我建议专注于sys.argv
,len(sys.argv)<4
,def这样做(a,b):…
,ìf
,elif
,在python.org上的教程中-如果遇到墙,请回来。这里的程序员会很乐意帮助您准备/找到下一堵墙;-)您应该显示您实际编写的代码,其语法让您感到困惑。因此,这不是一个代码编写服务。请使用类似这样的方法来迭代命令行参数:对于key,vars(args)中的值。iteritems():为什么要先尝试一些教程?听起来像是ArgParse的模型。。有一个谷歌!。。LMGTFY对@drum的修改:我建议将重点放在教程中的sys.argv
,len(sys.argv)<4
,def这样做(a,b):…
,f
,elif
,如python.org上的教程中,如果碰到墙,请回来。这里的编码员将乐于帮助您准备/找到下一堵墙;-)您应该显示您实际编写的代码,其语法让您感到困惑。因此,它不是一个代码编写服务。请使用类似这样的方法来迭代命令行参数:对于key,vars(args)中的值。iteritems():