首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过命令行传递所需和可选参数的变量数

通过命令行传递所需和可选参数的变量数
EN

Stack Overflow用户
提问于 2017-02-13 18:26:39
回答 1查看 1.3K关注 0票数 1

在我通过命令行调用的python脚本中有一个用户定义的函数。在这个函数中,有3个必需的参数和3个可选的参数。

所以函数定义如下所示:

代码语言:javascript
复制
def main(csv, inDir, batchID, mapprj=True, doP2D=True, rp=100):

当我调用CL上的函数时,我可能会也可能不会设置后三个输入变量。要使用这些输入调用这个函数,现在我有:

代码语言:javascript
复制
if __name__ == '__main__':
    import sys
    main(sys.argv[1], sys.argv[2], sys.argv[3])

但是假设我想设定rp = 50,那么这个调用就忽略了这个论点。但是,如果我进入sys.argv6,如果不指定其他3个可选参数,这将失败。

除了下面的块之外,还有更好的方法将这些参数提供给主函数吗?

代码语言:javascript
复制
if __name__ == '__main__':
    import sys

    if len(sys.argv) == 4: # i.e. 3 arguments are supplied
        main(sys.argv[1], sys.argv[2], sys.argv[3])

    if len(sys.argv) == 5: # i.e. 4 arguments are supplied
        main(sys.argv[1], sys.argv[2], sys.argv[3], sys.argv[4])

    if len(sys.argv) == 6: # i.e. 5 arguments are supplied
        main(sys.argv[1], sys.argv[2], sys.argv[3], sys.argv[4], sys.argv[5])

    if len(sys.argv) == 7: # i.e. 6 arguments are supplied
        main(sys.argv[1], sys.argv[2], sys.argv[3], sys.argv[4], sys.argv[5], sys.argv[6])

另外,如果我从命令行调用脚本(使用类似于上面的if语句),如下所示:

代码语言:javascript
复制
python script.py 'csvFile.csv' 'path/to/directory' 'batchName' False False rp=50

当我在主函数中“打印rp”时,它返回'rp=50‘。我认为在函数定义处设置rp=100表明rp是一个可选参数,其默认值为100,显式调用"rp=50“应该覆盖默认值,并将rp设置为50,而不是"rp=50”。

最后,当我像这样调用脚本时:

代码语言:javascript
复制
python script.py 'csvFile.csv' 'path/to/directory' 'batchName' rp=50

变量mapprj被设置为' rp =50',doP2D按默认值为True,而rp则保持默认值100。我认为上面的调用应该将mapprj和doP2D作为它们的缺省True值,并将rp设置为50,因为我显式地将它设置为50。

我做错了什么?

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-02-13 18:33:21

通过argparse解析命令行中的参数,生成所需的所有位置参数,只需解压解析后的args的一个片段,并将其传递给您的函数:

代码语言:javascript
复制
import argparse


if __name__ == '__main__': 
    ap = argparse.ArgumentParser()
    ap.add_argument("-c", "--csv", required=True, help = "filename")
    ...
    kwargs = vars(ap.parse_args())
    main(**kwargs)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42210962

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档