Python主函数中的命令行参数,跳过脚本名称

20

这是我的脚本

def main(argv):
    if len(sys.argv)>1:
        for x in sys.argv:
            build(x)

if __name__ == "__main__":
    main(sys.argv)

所以我从命令行输入 python myscript.py 命令行参数

我希望它跳过 myscript.py,并直接通过 commandlineargument(n) 运行 命令行参数

我知道我的 for 循环没有考虑到这点,但是我该如何让它完成这个功能呢?


1
如果 main 函数带有 argv 参数,那么它应该使用该参数,而不是忽略它并使用 sys.argv - abarnert
此外,您根本不需要进行if检查。如果没有参数,循环将成功运行0次,所以就让它这样做吧。 - abarnert
@abarnert 我有一个else。 - CQM
2个回答

31

由于 sys.argv 是一个列表,你可以使用切片 sys.argv[1:]:

def main(argv):
    for x in argv[1:]:
        build(x)

if __name__ == "__main__":
    main(sys.argv)

但是,如果你只能使用一个脚本参数,可以通过索引获取:sys.argv[1]。但是,你应该检查 sys.argv 的长度是否大于 1,并在不满足条件时抛出错误,例如:

def main(argv):
    if len(argv) == 1:
        print "Not enough arguments"
        return
    else:
        build(argv[1])

if __name__ == "__main__":
    main(sys.argv)

2

真正的答案是学习并使用 argparse


我以前用过那个,它与sys.argv或使用optparse相比有什么好处,还是说有其他的替代方案? - CQM
1
这是用于参数解析的工具(除非您需要 cliff)。它有一个很棒的 API。它不像 optparse 一样被弃用了。它可以标准化您的脚本的外观和感觉。 - jhermann

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接