【问题标题】:Default argument for argparseargparse 的默认参数
【发布时间】:2017-10-13 18:56:56
【问题描述】:

所以我有一个文件abc.py

--a string
--b string

作为可选参数 我希望能够做到

abc.py string --> func1
abc.py string --a string --> func1 and func2
abc.py string --a string --> func1 and func2
abc.py --a string --> func2

等等 我设法让 --a 和 --b 工作(分开和一起) 我不能成为 abc.py 字符串 在职的 我应该同时使用 argv 和 argparse 吗?

edit: 我想我的问题是我想处理默认没有任何参数的情况,即我运行 --> abc.py --a hello

if __name__ == '__main__':
parser=argparse.ArgumentParser()
parser.add_argument("default", help="default")
parser.add_argument("--a","-a", help="a")
parser.add_argument("--b","-b", help="b")
args=parser.parse_args()
if args.a:
    a_func(args.a)                   
if args.b:
    b_func(args.b)
default_func(args.default)

编辑:好吧,伙计们,我让它工作了,我所做的是

parser=argparse.ArgumentParser()
parser.add_argument("default",nargs="*", help="default")
parser.add_argument("--a","-a",nargs="*", help="a")
parser.add_argument("--b","-b",nargs="*", help="b")
args=parser.parse_args()
a_func(args.a)                   
b_func(args.b)
default_func(args.default)

现在我只检查函数内部的列表是否为空,我也可以在函数中处理多个参数

【问题讨论】:

  • 请澄清并使用标点符号。什么是“不工作”?向我们展示。
  • 我如何存储字符串并将其传递给函数,对不起 stackoverflow 的新手
  • 你能展示你的代码和预期的输入/输出吗?
  • @PranavShankar 将您的解决方案作为答案而不是作为问题的一部分发布对您会有所帮助。这可让您将问题标记为“已回答”,并让其他人更轻松地从您的回答中学习。
  • 您的初始规格不清楚。 abc.py --a string --> func2 是使用-a 正确的;还是你的意思是-b。你没有给出-b 会触发什么的例子。我强烈建议添加一个print(args),这样您就可以看到不同的输入(和add_argument 定义)产生了什么。

标签: python argparse argv


【解决方案1】:

你应该sys Python 标准库的模块:

#!/usr/bin/env python

import sys

print sys.argv[1] // first argument

在您的情况下,这将在命令行上打印string 输出。

传递给 Python 脚本的命令行参数列表。参数 [0] 是脚本名称(取决于操作系统,这是否是 完整路径名与否)。如果该命令是使用 -c 执行的 解释器的命令行选项,argv[0] 设置为字符串 '-C'。如果没有将脚本名称传递给 Python 解释器,则 argv[0] 是空字符串。 sys.argv

【讨论】:

  • @CIsForCookies 因为事实证明他在询问argparse optional arguments without dashes。由于缺乏信息,我认为这是关于位置参数的。这个问题可能是重复的......
  • @CIsForCookies 请看原版问题:stackoverflow.com/revisions/43971884/2
  • @CIsForCookies 我开始根据他的问题版本写我的答案,我完成并点击“发布你的答案”。然后页面刷新,我看到了更新的版本,但为时已晚。我可以删除我的答案,但删除一个答案会导致 Stack Overflow 的业务逻辑受到惩罚,因此我不想删除我的答案。我也无法更新我的答案,因为我不确定他到底在问什么。
猜你喜欢
  • 2021-10-16
  • 2014-12-07
  • 2018-03-26
  • 1970-01-01
  • 2015-09-28
  • 2022-08-05
  • 1970-01-01
  • 1970-01-01
  • 2017-02-20
相关资源
最近更新 更多