【问题标题】:How can I parse flags in command line argument?如何解析命令行参数中的标志?
【发布时间】:2021-03-14 23:56:12
【问题描述】:

我必须在 Python 中实现一个 --pos 标志并创建一个新条件(如果存在),但是当我在命令行参数中输入它时,argparse 无法识别它。

parser = argparse.ArgumentParser()
parser.add_argument('lang', type=str, help='Language')
parser.add_argument('mode', help='the mode you want to output the results with')
parser.add_argument('flag', help='the flag that triggers pos-tags')
args = parser.parse_args()

所以当我运行命令时:

python3 pi.py en lemma --pos

我收到以下错误消息:

error: unrecognized arguments: --pos

有没有办法将该标志作为第三个参数?

【问题讨论】:

  • 尝试将'flag' 更改为'--pos'
  • 不清楚你在问什么。您想在命令行中传递--pos,但在内部将其处理为flag...?标志样式解析在 argparse 的Introducing Optional arguments 中有说明。
  • @Ralubrusto 关闭。这将需要对标志的参数。您还需要添加action='store_true'。见Ruggero's answer

标签: python python-3.x argparse command-line-arguments


【解决方案1】:

在您的代码中,您定义了一个“位置参数”,这不是您想要的。如果你想实现一个标志(真/假)--pos 就这样做。

...
parser.add_argument('--pos', action='store_true', help='the flag that triggers pos-tags')
args = parser.parse_args()

if args.pos:
    ...

并将其称为

python3 pi.py en lemma --pos

【讨论】:

  • 另请注意,该标志可以在命令行的任何位置,例如python3 pi.py --pos en lemma 也可以工作。只是提一下,以防 OP 感到困惑。
  • 感谢您的回答!奇迹般有效。我之前确实尝试将'flag'更改为'--pos',但它也没有奏效。现在使用 'action='store_true'',它可以工作了!
猜你喜欢
  • 2016-01-11
  • 2019-10-13
  • 2021-07-21
  • 2011-04-27
  • 1970-01-01
  • 1970-01-01
  • 2013-03-21
相关资源
最近更新 更多