我正在构建一个命令行实用程序,它需要六条信息才能正常工作。它看起来像这样:
fm-git filename repository path comment username password
但是,在任何单独的系统上,username
并且password
将是恒定的。
执行该实用程序时,我发现很难构建。例如,这是对该实用程序的一个测试调用(为了便于阅读,分为多行):
/Users/chuck/Projects/fm-git/fm-git.py chiv-lib
/Users/chuck/Projects/chiv-lib/ Chivalry/ "continued testing"
Administrator abc1234
我正在考虑以不同的方式传递这些论点。例如,fm-git -f filename -r repository ...
或fm-git --filename filename --repository repository...
。我也在考虑进行username
和password
参数配置设置,因为它们通常不会改变,然后可以从实用程序调用中消除它们。
当实用程序参数很多但需要时,维护实用程序调用可读性的公认做法是什么?
通常,unix 应用程序允许多种方式来提供此信息,更“具体”的方式会覆盖不太具体的方式。
所以你有了:
对于图形应用程序,所使用的工具包几乎总是提供某种方式来获取资源(例如
xrdb
,普通 X 中的 -style 等)一个配置文件,如果工具包还没有提供一个。
命令行选项,短格式和长格式(
getopt
在 C 中很容易)如果没有给出信息,则合理的默认值,例如路径的当前目录
位置参数仅对少数强制性参数有意义,后面可能是文件列表(因为通配符规范扩展为多个参数)。六个单独的部分太多了;顺序很难记住,因此请使用这些选项。
对于密码,提供一种使应用程序从标准输入读取密码的方法可能会有所帮助,可能通过使用特殊值(例如
--password -
或-p -
)。使用该应用程序的人可以选择硬编码密码、配置文件中的密码或让用户输入密码是特定用例的最佳选择。
一般来说,最好是:
filename
与 相同$(basename repository)
,因此您可能只需要存储库,但可以选择--filename
提供替代文件名。ps
输出隐藏身份验证。把它们放在某个文件中:可能是$HOME/.fm-git.conf
,给文件更多的限制,比如chmod 600 $HOME/.fm-git.conf
从文件中读取它们。有时它也是从环境变量中获取用户名和密码的选项(例如默认用户名是您的系统用户名或SUDO_USER
),但可能不是您的情况。因此,在两次优化之后,您只有 3 个 cli 参数,我认为这是可以接受的。随意将它们用作位置参数或提供一些标志,例如
--comment
:如果您在脚本中进一步使用您的程序,则提供长标志将增强可读性,但如果您主要从 cli 手动运行程序,则需要输入更多。无论如何,当你用 Python 编写程序时,我建议你使用argparse 模块——它会帮助你解析参数并在将来如果你想更改它们进行更改。