【问题标题】:python command line arguments in main, skip script namemain中的python命令行参数,跳过脚本名称
【发布时间】:2013-10-01 17:46:28
【问题描述】:

这是我的脚本

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 并简单地运行 commandlineargumentcommandlineargument(n)

所以我知道我的 for 循环没有考虑到这一点,但我该如何让它做到这一点?

【问题讨论】:

  • 如果main 函数采用argv 参数,它可能应该使用该参数,而不是忽略它并改用sys.argv...
  • 另外,您根本不需要if 检查。如果没有参数,循环将成功运行 0 次,所以让它这样做。
  • @abarnert 我还有一个

标签: python for-loop command-line-arguments argv sys


【解决方案1】:

由于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 与其他东西有什么好处
    • 这是用于 arg 解析的东西(除非你需要 cliff)。它有一个很棒的 AP​​I。它不像optparse 那样被弃用。它标准化了脚本的外观。
    猜你喜欢
    • 2012-01-24
    • 1970-01-01
    • 1970-01-01
    • 2021-10-21
    • 1970-01-01
    • 2011-04-10
    • 2013-12-26
    • 2012-05-26
    • 2021-02-04
    相关资源
    最近更新 更多