【问题标题】:Best practices of writing a good usage output for a program为程序编写良好使用输出的最佳实践
【发布时间】:2021-09-22 14:18:15
【问题描述】:

我一直在网上寻找解释如何编写良好的程序使用输出的指南。

假设我有一些用 Python 编写的小程序:

import sys

def main():
    if len(sys.argv < 5):
        print("Wrong usage")
    else:
        #Do something with the 4 parameters
        #First two looks like this: -s1 SOMETHING1
        #Second two looks like this: -s2 SOMETHING2

if __name__ == "__main__":
    main()

假设我这样调用这个程序:

py someProgram.py -s1 SOMETHING1 -s2 SOMETHING2

前 2 个参数是必需的,其他 2 个参数不是。

使用信息的良好做法是什么?

我想到了这样的事情:

Usage: py program.py -p1 param1 [-p2 param2]

这是对的吗?我觉得-p1 param1 部分是错误的,它看起来不正确。

编辑: 好的,我在argparse 文档中迷失了方向。 有人可以提供一个简单的例子来说明我的需要吗?是否可以将2个参数连接在一起?假设我尝试访问 args.u 它会给我 param1 值吗?

【问题讨论】:

  • 使用argparse即可免费获得使用信息
  • @DeepSpace 这看起来很有趣,从不知道这个模块存在,我会研究它。但这更像是一个一般性的问题,即编写使用信息的指导方针是什么。我尝试阅读此guideline,但当我希望 2 个参数位于同一组中时,我真的不清楚,例如-p1 param1
  • 请注意,今天大多数程序对单字母选项使用单个连字符,对多字母选项使用两个连字符。因此-p1 param1 将是带有参数1 的单字母选项-p,后跟非选项参数param1。这令人困惑。如果您打算将param1 用作选项-p1 的参数,那么语法可能应该是--p1 param1--p1=param1。 argparse 将处理这个问题。如果您编写 Python,我强烈建议您使用 argparse。另外,请查看 GNU 编码标准。我也不完全同意,但它们给出了一些统一性
  • @TurePålsson 这个或一些约定没有标准?还有为什么双“-”?而且我问的不仅仅是 python 语言。

标签: python console usage-message


【解决方案1】:

如果你这样做

import argparse
ap = argparse.ArgumentParser()
ap.add_argument('-p', type=str)
ap.add_argument('-q', type=int)
ap.add_argument('-x', action='store_true')
ap.add_argument('infile', type=str)
args = ap.parse_args()

用户说

python3 your_program.py -p foo -q 17 -x hello.txt

那么args.p将包含字符串foo,args.q将包含整数17,args.x将是Trueargs.infile将包含字符串hello.txt

【讨论】:

  • 如果我不提供任何参数,它将如何输出正确的用法? -p 之后的变量名称是什么?
  • 你为什么不试试呢?碰巧,-p 选项的参数将被称为 P(即转换为大写的名称),但可以使用 metavar 参数 as described in the documentation 进行更改。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-09
  • 2011-06-29
相关资源
最近更新 更多