主命令行中的python命令行参数,跳过脚本名称
这是我的剧本主命令行中的python命令行参数,跳过脚本名称,python,for-loop,command-line-arguments,argv,sys,Python,For Loop,Command Line Arguments,Argv,Sys,这是我的剧本 def main(argv): if len(sys.argv)>1: for x in sys.argv: build(x) if __name__ == "__main__": main(sys.argv) 因此,我从命令行编写python myscript.py commandlineargument 我希望它跳过myscript.py并通过commandlineargument(n) 所以我知道我的for循环
def main(argv):
if len(sys.argv)>1:
for x in sys.argv:
build(x)
if __name__ == "__main__":
main(sys.argv)
因此,我从命令行编写python myscript.py commandlineargument
我希望它跳过myscript.py
并通过commandlineargument(n)
所以我知道我的for循环没有考虑到这一点,但是我如何使它做到这一点呢?因为它是一个列表,所以可以使用切片sys.argv[1://code>:
def main(argv):
for x in argv[1:]:
build(x)
if __name__ == "__main__":
main(sys.argv)
但是,如果您只能有一个脚本参数,只需通过索引获取它:sys.argv[1]
。但是,您应该检查sys.argv的长度是否大于1,如果不大于1,则抛出错误,例如:
def main(argv):
if len(argv) == 1:
print "Not enough arguments"
return
else:
build(argv[1])
if __name__ == "__main__":
main(sys.argv)
真正的答案是了解并使用argparse
。如果main
函数接受了argv
参数,它可能应该使用该参数,而不是忽略它,而是使用sys.argv
来代替…此外,您根本不需要If
检查。如果没有参数,循环将成功运行0次,所以让它这样做。@abarnert我有一个else我以前使用过,它和sys.argv或使用optpass与其他东西之间的好处是什么?它是arg解析使用的东西(除非你需要cliff
)。它有一个很棒的API。它不像optpasse
那样被弃用。它标准化了脚本的外观和感觉。