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
并简单地运行 commandlineargument
到 commandlineargument(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
)。它有一个很棒的 API。它不像optparse
那样被弃用。它标准化了脚本的外观。以上是关于main中的python命令行参数,跳过脚本名称的主要内容,如果未能解决你的问题,请参考以下文章