主命令行中的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
那样被弃用。它标准化了脚本的外观和感觉。