main中的python命令行参数,跳过脚本名称

Posted

技术标签:

【中文标题】main中的python命令行参数,跳过脚本名称【英文标题】:python command line arguments in main, skip script name 【发布时间】: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 我还有一个 【参考方案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 那样被弃用。它标准化了脚本的外观。

以上是关于main中的python命令行参数,跳过脚本名称的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Windows 命令行中使用参数运行 Python 脚本

Python笔记:命令行参数解析

python命令行使用参数

什么是命令行参数?本人是c++菜鸟

将命令行参数传递给调用带有装饰器参数的装饰函数的函数

Python 命令行参数和getopt模块详解