有关执行命令行界面的建议

时间:2020-03-06 14:29:19  来源:igfitidea点击:

我正在重新设计命令行应用程序,并且正在寻找一种使它的使用更加直观的方法。传递给命令行应用程序的参数格式是否有约定?还是人们发现有用的任何其他方法?

解决方案

-操作[参数]-命令[命令]-其他[otherparams]...。

例如,

YourApp.exe -file %YourProject.prj% -Secure true

如果我们使用的是Ctry Mono.GetOptions,则它是一个非常强大且易于使用的命令行参数解析器。它可以在Mono环境和Microsoft .NET Framework中工作。

编辑:这是一些功能

  • 每个参数都有2个CLI表示形式(1个字符和字符串,例如-a或者--add)
  • 默认值
  • 强类型
  • 自动生成带有说明的帮助屏幕
  • 自动生成版本和版权屏幕

如果使用标准工具之一来生成命令行界面(如getopts),则将自动遵循。

最好的办法是,如果可以的话,不要假设任何事情。当操作员键入要执行的应用程序名称且没有任何参数时,请使用USAGE块将其击中,或者打开Windows窗体并允许他们输入所需的所有内容。

c:\>FOO

FOO

USAGE FOO -{Option}{Value}

-A Do A stuff
-B Do B stuff

c:\>

我在宗教主题的标题下放置参数定界:连字符(破折号),双连字符,斜杠,无,位置等。

我们没有指明平台,但是在接下来的评论中,我将假定使用Windows和.net

我们可以在.net中创建基于控制台的应用程序,并通过选择基于控制台的项目,然后添加Windows.Forms,System.Drawing等DLL,允许其使用Forms与桌面进行交互。

我们一直在这样做。这样可以确保没有人掉下来一个黑暗的小巷。

我总是加一个/?参数以获取帮助,我总是尝试使用默认(即最常见的情况)实现。

否则,我倾向于将" / x"用于开关,将" / x:value"用于需要传递值的开关。使使用正则表达式解析参数变得非常容易。

我们为应用程序使用的约定取决于

1)它是什么类型的应用程序。
2)我们正在使用什么操作系统。 Linux的?视窗?他们都有不同的约定。

我的建议是查看系统上其他命令的其他命令行界面,特别注意传递的参数。具有不正确的参数应该给用户解决方案指示错误信息。易于查找的帮助屏幕也可以帮助提高可用性。

在不知道应用程序将要做什么的情况下,很难给出具体的例子。

我喜欢某些CLI的一件事是使用快捷方式。
也就是说,以下所有行都在做同一件事

myCli.exe describe someThing
myCli.exe descr someThing
myCli.exe desc someThing

这样,用户可能不必每次都键入all命令。

这是一篇CodeProject文章,可能会对我们有所帮助...

C#/。NET命令行参数解析器

如果我们喜欢VB,这里有另一篇文章(还有更多与指南有关的内容)供我们参考...

使用VB.NET解析和验证命令行参数

The conventions that you use for you application would depend on
  
  1) What type of application it is.
  2) What operating system you are using.

确实是这样。我不确定dos-prompt约定,但在类似Unix的系统上,常规约定大致如下:

1)格式为

appName parameters

2)单字符参数(例如" x")作为-x传递
3)多字符参数(例如" add-keys")作为--add-keys传递

命令行约定因操作系统而异,但是使用最多的约定和最受公众关注的约定是GNU getopt软件包支持的约定。有关更多信息,请参见http://www.gnu.org/software/libc/manual/html_node/Using-Getopt.html。

它允许我们将单字母命令(例如-nr)与更长的自文档选项(例如--numeric --reverse)混合使用。很好,实现--help(-?)选项,然后用户将可以弄清楚他们需要知道的所有内容。

补充@vonc的答案,不要接受模棱两可的缩写。例如:

myCli.exe describe someThing
  myCli.exe destroy someThing
  myCli.exe des someThing ???

实际上,在那种情况下,我可能不会接受" destroy"的缩写。

我看到了许多Windows命令行细节,但是如果程序是针对Linux的,我发现GNU命令行标准是最直观的。基本上,对于命令的长格式(例如-help),它使用双连字符,对于短版本的命令(例如,-h),则使用单个连字符。我们还可以将简短的版本"堆叠"在一起(例如," tar -zxvf"文件名),并根据自己的喜好混合长短匹配项。

GNU网站还列出了标准选项名称。

getopt库大大简化了解析这些命令的过程。如果不是C,Python和Perl都有类似的库。

如果我们使用的是Perl,则可能正是我们所需要的CLI :: Application框架。它使我们可以轻松地使用类似用户界面的SVN / CVS / GIT构建应用程序("命令-o-长选择某些动作以执行某些参数")。

我创建了一个.Net Clibrary,其中包括一个命令行解析器。我们只需要创建一个从CmdLineObject类继承的类,调用Initialize,它将自动填充属性。它可以处理对不同类型的转换(使用项目中还包括的高级转换库),数组,命令行别名,单击一次参数等。它甚至可以自动创建命令行帮助(/?)。

如果我们有兴趣,则该项目的URL为http://bizark.codeplex.com。当前仅作为源代码提供。