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
我是 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