精华内容
下载资源
问答
  • python 命令行界面 本文有一个简单的目标:帮助新Python开发人员掌握一些有关命令行界面 (CLI)的历史和术语,并探索如何用Python编写这些有用的程序。 在一开始的时候… 首先, Unix对命令行界面设计的看法。 ...

    python 命令行界面

    本文有一个简单的目标:帮助新Python开发人员掌握一些有关命令行界面 (CLI)的历史和术语,并探索如何用Python编写这些有用的程序。

    在一开始的时候…

    首先, Unix对命令行界面设计的看法。

    Unix是计算机操作系统,是Linux和macOS(以及许多其他操作系统)的始祖。 在使用图形用户界面之前,用户是通过命令行提示符(想想当今的Bash环境)与计算机进行交互的。 在Unix下开发这些程序的主要语言是C ,它的功能非常强大

    因此,我们至少应该了解C程序的基础。

    假设您没有阅读该链接,则C程序的基本体系结构是一个称为main的函数,其签名如下所示:

    
       
        int main ( int argc , char ** argv )
        {
       ...
        }

    对于Python程序员来说,这看起来并不奇怪。 C函数首先有一个返回类型,一个函数名称,然后是括号内的键入参数。 最后,函数的主体位于花括号之间。 函数名称main运行时链接程序(构造和运行程序的程序)如何决定从哪里开始执行程序的方式。 如果您编写的C程序不包含名为main的函数,则它将不会执行任何操作。 伤心。

    argcargv一起描述了用户在调用程序时在命令行上键入的字符串列表。 在典型的简短Unix命名传统中, argc表示参数计数argv表示参数向量 。 Vector听起来比list凉爽,而argl听起来像是勒死的argl 。 我们是Unix系统程序员,我们不求助。 我们让其他人哭泣寻求帮助。

    继续

     $  . / myprog foo bar -x baz 
    

    如果myprog是用C实现的,则argc的值为5,而argv是指向具有五个条目的字符的指针数组。 (不要担心这听起来是否太技巧性了;它是五个字符串的列表。)向量的第一个条目argv[0]是程序的名称。 argv的其余部分包含参数:

    
       
       argv [ 0 ] == "./myprog"
       argv [ 1 ] == "foo"
       argv [ 2 ] == "bar"
       argv [ 3 ] == "-x"
       argv [ 4 ] == "baz"
       
        /* Note: not valid C */

    在C语言中,您有很多选择来处理argv的字符串。 您可以手动遍历数组argv并根据程序需要解释每个字符串。 这是相对容易的,但是由于不同的程序员对“好”有不同的想法,因此导致程序具有截然不同的接口。

    
       
    include < stdio. h >

    /* A simple C program that prints the contents of argv */

    int main ( int argc , char ** argv ) {
        int i ;
       
        for ( i = 0 ; i < argc ; i ++ )
          printf ( "%s \n " , argv [ i ] ) ;
    }

    早期尝试标准化命令行

    命令行工具库中的下一个武器是称为getoptC标准库函数。 此函数允许程序员解析开关,在其前面带有短划线的参数(例如-x ,并可以选择将后续参数与其开关配对。 考虑一下像“ /bin/ls -alSh" ,类的命令调用/bin/ls -alSh" , getopt是最初用于解析该参数字符串的函数。 使用getopt使解析命令行非常容易,并改善了用户体验(UX)。

    
       
    #include <stdio.h>
    #include <getopt.h>

    #define OPTSTR "b:f:"

    extern char * optarg ;

    int main ( int argc , char ** argv ) {
        int opt ;
        char * bar = NULL ;
        char * foo = NULL ;
       
        while ( ( opt = getopt ( argc , argv , OPTSTR ) ) != EOF )
            switch ( opt ) {
              case 'b' :
                  bar = optarg ;
                  break ;
              case 'f' :
                  foo = optarg ;
                  break ;
              case 'h' :
              default ':
                  fprintf(stderr, "Huh? try again.");
                  exit(-1);
                  /* NOTREACHED */
           }
        printf("%s \n ", foo ? foo : "Empty foo");
        printf("%s \n ", bar ? bar : "Empty bar");
    }

    就个人而言,我希望 Python能够switch ,但这永远不会发生

    GNU一代

    GNU项目随之而来,并为传统Unix命令行工具的实现引入了更长的格式参数,例如--file-format foo 。 当然,我们Unix程序员讨厌这种输入方式,因为输入的内容太多,但是像恐龙一样,我们输了,是因为用户喜欢更长的选项。 我从未使用GNU样式的选项解析编写任何代码,因此这里没有代码示例。

    GNU风格的参数也接受必须支持的短名称,例如-f foo 。 所有这些选择为程序员带来了更多的工作量,他们只是想知道用户的要求并继续进行下去。 但是用户获得了更加一致的用户体验:长格式和短格式选项以及自动生成的帮助,这些帮助通常使用户无法尝试阅读臭名昭著的难于解析的手册页(有关特别糟糕的示例,请参阅ps )。

    但是我们在谈论Python吗?

    您现在已经了解了足够多(太多?)命令行历史记录,以获取有关如何使用我们喜欢的语言编写CLI的一些信息。 Python提供了许多类似的命令行解析选择。 自己动手,包含电池的选件和大量第三方选件。 选择哪一种取决于您的特定情况和需求。

    首先,自己动手

    您可以从sys模块获取程序的参数。

    
       
    import sys

    if __name__ == '__main__' :
        for value in sys . argv :
            print ( value )

    含电池

    Python标准库中有几种参数解析模块的实现。 getoptoptparse和最近的argparseArgparse允许程序员为用户提供一致且有用的UX,但是像其GNU前提一样,程序员要使其“良好”,需要大量的工作和“ 样板代码 ”。

    
       
    from argparse import ArgumentParser

    if __name__ == "__main__" :

       argparser = ArgumentParser ( description = 'My Cool Program' )
       argparser. add_argument ( "--foo" , "-f" , help = "A user supplied foo" )
       argparser. add_argument ( "--bar" , "-b" , help = "A user supplied bar" )
       
       results = argparser. parse_args ( )
        print ( results. foo , results. bar )

    收益是自动生成的帮助,当用户调用--help时可用。 但是, 包括电池的优势又如何呢? 有时,项目的情况表明您对第三方库的访问权限有限或没有访问权限,因此您必须“使用” Python标准库。

    CLI的现代方法

    然后是ClickClick框架使用装饰器方法来构建命令行解析。 突然之间,编写丰富的命令行界面既有趣又容易。 在装饰器的酷炫和未来主义的使用下,大部分复杂性消失了,用户惊叹于自动支持关键字补全和上下文帮助。 所有这些都比以前的解决方案编写更少的代码。 只要您可以编写更少的代码,但仍然可以完成工作,这是双赢。 我们都想要胜利。

    
       
    import click

    @ click. command ( )
    @ click. option ( "-f" , "--foo" , default = "foo" , help = "User supplied foo." )
    @ click. option ( "-b" , "--bar" , default = "bar" , help = "User supplied bar." )
    def echo ( foo , bar ) :
        """My Cool Program
       
        It does stuff. Here is the documentation for it.
        """

        print ( foo , bar )
       
    if __name__ == "__main__" :
        echo ( )

    您可以在@click.option装饰器中看到一些与argparse相同的样板代码。 但是创建和管理参数解析器的“工作”已被抽象化。 现在,已解析了命令行参数并为函数参数分配了值,从而神奇地调用了函数echo

    Click接口添加参数就像在堆栈中添加另一个装饰器并将新参数添加到函数定义一样容易。

    但是,等等,还有更多!

    Typer建立在Click之上,是一个更新的 CLI框架,它将Click的功能与现代Python 类型提示结合在一起。 使用Click的缺点之一是必须添加到函数中的装饰器堆栈。 CLI参数必须在两个位置指定:装饰器和函数参数列表。 Typer 出CLI规范,从而使代码更易于阅读和维护。

    
       
    import typer

    cli = typer. Typer ( )

    @ cli. command ( )
    def echo ( foo: str = "foo" , bar: str = "bar" ) :
        """My Cool Program
       
        It does stuff. Here is the documentation for it.
        """

        print ( foo , bar )
       
    if __name__ == "__main__" :
        cli ( )

    是时候开始编写一些代码了

    这些方法中的哪一种是正确的? 这取决于您的用例。 您是否正在编写一个仅会使用的快速而肮脏的脚本? 直接使用sys.argv并继续运行。 您是否需要更强大的命令行解析? 也许argparse就足够了。 您是否有许多子命令和复杂的选项,您的团队是否每天都会使用它? 现在,您绝对应该考虑ClickTyper 。 成为程序员的乐趣之一就是寻找其他实现,以找出最适合您的实现。

    最后,有许多第三方软件包可用于在Python中解析命令行参数。 我只介绍了我喜欢或曾经使用过的那些。 完全可以,希望您喜欢和/或使用其他软件包。 我的建议是从这些开始,看看最终的结果。

    去写一些很酷的东西。


    这篇文章最初出现在PyBites上 ,经许可重新发布。

    翻译自: https://opensource.com/article/20/6/c-python-cli

    python 命令行界面

    展开全文
  • 命令行界面设计

    千次阅读 2018-02-12 16:15:18
    转载信息转自子清行:命令行界面设计,原作者保留所有权利。本文尝试介绍几个关于CLI设计最重要的准则。

    #转载信息

    转自子清行:命令行界面设计,原作者保留所有权利。

    #正文

    虽然已存在大量关于图形用户界面(GUIs)设计的文章,可是介绍命令行界面(CLIs)设计的却很少。本文尝试介绍几个关于CLI设计最重要的准则。

    本文假设该命令行工具用于 *nix 系统(例如 GUN/Linux、BSD、Mac OS X,UNIX),并且会频繁地参考这些系统中的常用工具。

    命令行界面类型

    命令行界面主要有三种:

    • 非交互
    • 基于行的交互
    • 文本用户界面

    非交互式程序在调用后不再需要任何用户干预。诸如 ls、mv 和 cp。

    基于行的交互式程序在执行期间经常需要与用户交互。它们会往标准输出中写入文本信息,还可能会请求用户通过标准输入来输入信息。属于这类的程序有 ed 和 metasploit。

    文本用户界面介于 GUI 和 CLI 之间。它们在终端仿真器里运行了一个图形用户界面。例如 nethack 和 vi。许多(但非全部)在 ×nix 上的文本用户界面都是使用 curses 或较新的 ncurses。

    本文重点关注非交互式程序,而文本用户界面几乎没有涉及。

    命令行界面的优势

    都 21 世纪了,为什么还用命令行界面?图形用户界面早在十几年前就发明了!

    时至今日,许多命令行界面仍拥有几个胜过图形用户界面的优势。它们在超级用户、程序员以及系统管理员中间很流行;部分原因是许多优势很适合他们的品味:

    • 易于自动化:使用脚本,很多命令行程序都能轻松实现自动化;
    • 快速地启动:许多命令行程序多次在启动时间上击败它们同类的 GUI 程序;
    • 易于远程调用:也许只是我而已,但我更喜欢通过 SSH 或 VNC 远程控制计算机;
    • 对系统要求较低:这使得 CLI 在嵌入式系统中更有用;
    • 更高的效率:只需键入一些字符就能做很多事情,而不必在菜单中搜索,提高你的工作效率;
    • 对键盘友好:抓着鼠标容易分心。

    命令行界面的劣势

    已经罗列了命令行界面的优势,最好也给出它们的劣势。最主要的缺点是学习曲线比较陡峭,很多情况下你不得不去翻手册;而使用 GUI 产品时你能自己估计出很多东西。

    在显示和编辑图形化信息时 GUIs 也有优势。包括照片处理和看电影(我总希望有个程序能将电影实时地转换成 ASCII 字符图片并在我的终端里展示,这会非常得酷)。

    避免使用交互

    相较于非交互式用户界面,交互式界面更难自动化。易于自动化是命令行界面最大的优点,如果让你的工具采用交互式界面,就会失去这个优点。

    个别情况下交互式工具会比非交互式更合理,但至少不要在这个优势不明显的时候这样做。你的工具不应该要求用户(交互式地)输入那些很容易以参数形式传递给程序的东西。

    命名你的工具

    我想要强调给每个命令行工具取一个好名字的重要性。因为一个坏的名字很容易被忘记,意味着用户将不得不花更多的时间去查寻。

    名字要短。长的名字不方便输入,所以别管你的版本控制程序叫“my-aswsome-version-control-program”。给它取个短一些的名字,例如 avc(Awesome Version Control)

    名字还要容易记。别取ytzxzy这样的名字。

    参数

    对于参数有很多可以说。首先,按照标准习惯,单字母选项用一个连字号做前缀,并且可以直接跟随多个(比如 -la 和 -l -a 是一个意思)。多字母选项由两个连字号做前缀,并写每个参数之间必须用空格隔开。参看 ls 或 cp 的参数,遵循它们的工作方式。dd 没有遵循标准,因此常遭人诟病。

    继续标准习惯的主题,如果有一个与你的程序功能类似的工具(或者是同一分类的工具,例如都属于文件管理)用一些选项来做某些事情,将它的行为复制到你的程序中会是一个不错的主意。看看大多数 *nix 文件管理工具,例如 mv、cp 和 rm,它们都提供了 -i 选项,并提供相同的行为:要求用户确认操作。它们同样都提供了 -f 选项来强制执行(这让计算机开启来很蠢,不过你在使用选项的时候知道自己在做什么,不是吗?)。

    顾名思义,选项(options)应该是可选的(optional)。但它有时会被人遗忘。命令行工具应该允许不带任何参数就可执行。比如 cd,没有参数时返回到自己的家目录。有些程序没有参数的话可能没有意义,比如 mv,但大多数情况,你都能找到有意义的标准的行为(不过请记住,只单单输出错误信息并退出也比做些用户不期望发生的傻事要好(哦,你没有给 rm 任何选项,那最好删除c磁盘上所有的文件,以保证你要删除的文件会被删掉))。

    在 *nix 世界里有个习惯:任何在双连字号之后的东西都将被看成文件名,即使名字中包含了连字号(比如 cmd – -FILE-)。如果参数列表以单个连字号结尾,就从标准输入中读取。

    小心使用那些只是大小写不同的标记(比如 -R 和 -r),它们很难记。

    总是提供与短参数相应的长参数。不要只提供 -i,也要一起提供 --interactive。

    提供 --version 和 --help

    这两个选项你应该总是包含在你的程序中:--version--help。第一个选项输出程序的版本信息;第二个介绍这是一个什么程序,如何使用以及目前常用的——如果不是所有——选项。

    读取输入

    确保你的程序可以从管道或通过文件重定向中读取数据

    如果文件名作为参数传递给程序,就读取文件的内容作为输入。如果没有提供这样的参数,就从标准输入中读取,一直到 CTRL+D

    此时无声胜有声

    如果程序没什么重要的事情要说,就保持安静(人也适用)。当我执行 mv 时,我不希望它告诉我它已将一个文件移到另一个地方去了。毕竟,这不正是我让它做的事情么?这对我来说是确信无疑的,所以不需要显式地告诉我。当那些并不期望发生的事情发生了,才应该打破沉默。例如我想移动的文件不存在,或者我在目标目录下没有写的权限。

    要注意,你的程序不需要在每次调用的时候都输出它的版本号、版权信息,或作者的名字。这些只是额外的噪音,浪费空间,使用远程会话时浪费带宽,还可能导致输出很难被自动处理,比如将它们通过管道转发给其他程序。

    同样的,也不要强调这些输出是什么。用户应该知道自己在用什么程序。whoami 仅仅输出当前用户的名字。如果输出“The name of the current user is: x”,那单纯提取名字就会更费功夫。

    很多程序提供-v(verbose)选项让程序变得更啰嗦;还有一个-q(quiet)选项让程序闭嘴(可能除了一些致命错误)。默认行为不应是完全沉寂,而是大多数情况下保持沉默。程序只在适当的时候输出一些东西

    如果让用户输入 yes 或 no

    有时,你的程序可能出于不同的原因需要询问 yes 或 no。最常见的是要求用户确认(do you really want to do this?);或者可能是计算机试着提供问题的解决方法(Table USERS doesn’t exist, do you want me to create it for you?)。

    当问题的答案要么是 yes 或是 no(或者 y 和 n),你应该给问题后面给出(y/n)

    Do you really want to do this (y/n)?
    

    多数程序要求你在键入字母后手工敲回车。虽然这显得多余,但大多数程序都这么做,为了保持一致,让用户不要感到惊讶,你的程序也应该要求用户这样做。

    告诉我你想要什么样的输入

    如果你的程序请求输入一个日期,但又不告诉我该怎么输入,我就会很困惑:

    Enter a date:
    

    能提示我要输入日期的格式,就不会造成困扰了:

    Enter a date (YYYY-MM-DD):
    

    同样的,如果程序只是要求输入一个长度,我就不晓得它会是千米、米、英里、英尺……?当一个东西有不同的单位时,就该把单位告诉我。

    每个程序只做一件事情,并把它做好

    这是 UNIX 哲学中最重要部分的其中一条,并经历过时间的考验。作为一条很好的建议,它的历史可以追溯到上世纪60年代后期或70年代初期。在实践中,这意味着你不该创造一个文件管理程序,而应创造一个程序用于删除文件,另一个用于移动文件,还有一个用于复制文件。

    在“只做一件事”的副作用中,你更需要关注“做好一件事”这一点。

    展开全文
  • cli命令行界面 demo 本系列的第一篇 有关使用Java解析命令行参数的文章介绍了Apache Commons CLI库。 这是本系列中介绍的基于Java的命令行解析库中最古老的,而且可能是最常用的之一。 Apache Commons CLI确实显示...

    cli命令行界面 demo

    系列第一篇 有关使用Java解析命令行参数的文章介绍了Apache Commons CLI库。 这是本系列中介绍的基于Java的命令行解析库中最古老的,而且可能是最常用的之一。 Apache Commons CLI确实显示了它的时代,特别是与一些更现代的基于Java的命令行处理库相比时。 Mark A. Ziesemer的“ Apache Commons CLI上的CLI库包装”,称为MarkUtils-CLI,旨在“现代化” Apache Commons CLI,并且是本博客文章的主题。

    Ziesemer在博客文章“ MarkUtils-CLI:Apache Commons CLI的注释(及更多) ”中写道:


    我觉得Apache Commons CLI项目卖空了。 我发现它是一个非常全面,设计良好的库,可以有效地解析命令行。 我观察到的唯一缺点是该项目是在Java 5和注释可用之前开发的。 因此,该库不支持注释必须提供的任何功能。

    引入MarkUtils的最新功能:MarkUtils-CLI是一个库,可在Apache Commons CLI和Java注释之间提供有效的桥梁,而无需替换成熟的Commons CLI库。

    这篇文章使用了与本系列以前的文章(“文件”和“详细”命令行选项)相似的示例,以说明MarkUtils-CLI如何包装Apache Commons CLI,并允许通过注释定义选项并提供类型化选项。 在本文中,使用MarkUtils-CLI的CliRunner是为了方便。 这些示例的完整源代码清单可在GitHub上找到

    MarkUtils-CLI的“定义”阶段是应用@Parameter注释的地方,如下面的代码清单所示。

    MarkUtils-CLI的“定义”阶段

    @Parameter(name="f", longName="file", description="Path/name of file", required=true)
    public String file;
    
    @Parameter(name="v", longName="verbose", description="Verbosity enabled or not", argCount=0)
    public boolean verbose;

    此代码清单显示了如何将“短”选项名称 (单个连字符/单个字符)和“长”选项名称 (双连字符/单词)指定为@Parameter批注的不同元素。 MarkUtils-CLI创建的“帮助”中可以使用“ description ”元素,并且“ required ”注释元素允许您指定必需的选项。 为“详细”指定argCount为零还向解析器指示“详细”选项不需要任何参数。

    可以通过CliRunner和Apache Commons CLI CommandLineParser的实例在MarkUtils-CLI中完成“解析”阶段。 在下一个代码清单中对此进行了演示,其中将Apache Commons CLI的DefaultParser实例与该类的实例(其字段使用@Parameter注释进行注释)一起传递给CliRunner的构造函数。

    MarkUtils-CLI的“解析”阶段

    final DefaultParser cmdLineParser = new DefaultParser();
    final CliRunner<Main> cliRunner = new CliRunner(cmdLineParser, Main.class);

    当使用MarkUtils-CLI的CliRunner方法时,“询问”阶段是在Callablecall()方法中完成的,该方法传递给CliRunner的“ run”方法。 下一个代码清单中显示了“ call()”方法的实现, 在GitHub完整源代码清单中提供了将拥有的Callable传递给CliRunner的“ run”方法的代码

    MarkUtils-CLI的“审讯”阶段

    @Override
    public Integer call() throws Exception
    {
       out.println("File path/name is '" + file + "' and verbosity is " + verbose);
       return file != null ? 0 : -1;
    }

    接下来的两个屏幕快照演示了到目前为止显示的示例。 第一张图片显示了当没有提供所需的“文件”选项时生成的帮助信息。 第二张图片描绘了针对“文件”和“详细”的短名称和长名称选项的各种组合的示例代码的行为。

    选择框架或库来帮助Java进行命令行解析时,需要考虑MarkUtils-CLI的特征。

    MarkUtils-CLI是Apache Commons CLI的小型包装,通过使用批注和命令行选项类型的处理,使Apache Commons CLI体验现代化。 MarkUtils-CLI很可能会吸引那些已经在使用Apache Commons CLI的用户,并希望享受更轻松的带有注释的选项定义和更多类型安全的选项解析的好处。 该库的优点包括库的当前支持和全面的单元测试。 可能阻止某些人使用该库的问题是其GPL许可证及其对SLF4J的外部依赖关系(假定Apache Commons CLI依赖关系不是问题,因为它被宣传为Apache Commons CLI的包装器)。

    其他参考

    翻译自: https://www.javacodegeeks.com/2017/10/java-command-line-interfaces-part-24-markutils-cli.html

    cli命令行界面 demo

    展开全文
  • 使用 yargs 轻松创建面向子任务的命令行界面。 什么是“面向子任务”? 一些程序有一个命令行界面,它暴露一个单一的全局界面。 很好的例子是: ls tail 然而,有些程序足够复杂,以至于它们执行几个不同的任务...
  • 作者:Amjith Ramanujam译者:...在本文中,我会指出命令行界面的可发现性discoverability缺点以及克服这些问题的几种方法。 我喜欢命令行。我第一次接触命令行是在 1997 的 DOS 6.2 上。我学习了各种命令的语法...

     

    作者:  Amjith Ramanujam 译者: LCTT geekpi 

     

    让我们来看几个精心设计的 CLI 程序,以及如何解决一些可发现性问题。

    在本文中,我会指出命令行界面的可发现性discoverability缺点以及克服这些问题的几种方法。

    我喜欢命令行。我第一次接触命令行是在 1997 的 DOS 6.2 上。我学习了各种命令的语法,并展示了如何在目录中列出隐藏的文件(attrib)。我会每次仔细检查命令中的每个字符。 当我犯了一个错误,我会从头开始重新输入命令。直到有一天,有人向我展示了如何使用向上和向下箭头按键遍历命令行历史,我被震惊了。

    后来当我接触到 Linux 时,让我感到惊喜的是,上下箭头保留了它们遍历历史记录的能力。我仍然很仔细地打字,但是现在,我了解如何盲打,并且我能打的很快,每分钟可以达到 55 个单词的速度。接着有人向我展示了 tab 补完,再一次改变了我的生活。

    在 GUI 应用程序中,菜单、工具提示和图标用于向用户展示功能。而命令行缺乏这种能力,但是有办法克服这个问题。在深入解决方案之前,我会来看看几个有问题的 CLI 程序:

    1、 MySQL

    首先让我们看看我们所钟爱的 MySQL REPL。我经常发现自己在输入 SELECT * FROM 然后按 Tab 的习惯。MySQL 会询问我是否想看到所有的 871 种可能性。我的数据库中绝对没有 871 张表。如果我选择 yes,它会显示一堆 SQL 关键字、表、函数等。(LCTT 译注:REPL —— Read-Eval-Print Loop,交互式开发环境)

    MySQL gif

    MySQL gif

    2、 Python

    我们来看另一个例子,标准的 Python REPL。我开始输入命令,然后习惯按 Tab 键。瞧,插入了一个 Tab 字符,考虑到 Tab 在 Python 源代码中没有特定作用,这是一个问题。

    Python gif

    Python gif

    好的用户体验

    让我看下设计良好的 CLI 程序以及它们是如何克服这些可发现性问题的。

    自动补全: bpython

    Bpython 是对 Python REPL 的一个很好的替代。当我运行 bpython 并开始输入时,建议会立即出现。我没用通过特殊的键盘绑定触发它,甚至没有按下 Tab键。

    bpython gif

    bpython gif

    当我出于习惯按下 Tab 键时,它会用列表中的第一个建议补全。这是给 CLI 设计带来可发现性性的一个很好的例子。

    bpython 的另一个方面是可以展示模块和函数的文档。当我输入一个函数的名字时,它会显示这个函数附带的签名以及文档字符串。这是一个多么令人难以置信的周到设计啊。

    上下文感知补全:mycli

    mycli 是默认的 MySQL 客户端的现代替代品。这个工具对 MySQL 来说就像 bpython 之于标准 Python REPL 一样。mycli 将在你输入时自动补全关键字、表名、列和函数。

    补全建议是上下文相关的。例如,在 SELECT * FROM 之后,只有来自当前数据库的表才会列出,而不是所有可能的关键字。

    mycli gif

    mycli gif

    模糊搜索和在线帮助: pgcli

    如果您正在寻找 PostgreSQL 版本的 mycli,请看看 pgcli。 与 mycli 一样,它提供了上下文感知的自动补全。菜单中的项目使用模糊搜索缩小范围。模糊搜索允许用户输入整体字符串中的任意子字符串来尝试找到正确的匹配项。

    pgcli gif

    pgcli gif

    pgcli 和 mycli 在其 CLI 中都实现了这个功能。斜杠命令的文档也作为补全菜单的一部分展示。

    可发现性: fish

    在传统的 Unix shell(Bash、zsh 等)中,有一种搜索历史记录的方法。此搜索模式由 Ctrl-R 触发。当再次调用你上周运行过的命令时,例如 ssh或 docker,这是一个令人难以置信的有用的工具。 一旦你知道这个功能,你会发现自己经常会使用它。

    如果这个功能是如此有用,那为什么不每次都搜索呢?这正是 fish shell 所做的。一旦你开始输入命令,fish 将开始建议与历史记录类似的命令。然后,你可以按右箭头键接受该建议。

    命令行规矩

    我已经回顾了一些解决可发现性的问题的创新方法,但也有一些基本的命令行功能应该作为每个 REPL 所实现基础功能的一部分:

    • 确保 REPL 有可通过箭头键调用的历史记录。确保会话之间的历史持续存在。
    • 提供在编辑器中编辑命令的方法。不管你的补全是多么棒,有时用户只需要一个编辑器来制作完美的命令来删除生产环境中所有的表。
    • 使用分页器(pager)来管道输出。不要让用户滚动他们的终端。哦,要为分页器设置个合理的默认值。(记得添加选项来处理颜色代码。)
    • 提供一种通过 Ctrl-R 界面或者 fish 式的自动搜索来搜索历史记录的方法。

    总结

    在第 2 节中,我将来看看 Python 中使你能够实现这些技术的特定库。同时,请查看其中一些精心设计的命令行应用程序:

    • bpython或 ptpython:具有自动补全支持的 Python REPL。
    • http-prompt:交互式 HTTP 客户端。
    • mycli:MySQL、MariaDB 和 Percona 的命令行界面,具有自动补全和语法高亮。
    • pgcli:具有自动补全和语法高亮,是对 psql 的替代工具。
    • wharfee:用于管理 Docker 容器的 shell。

    了解更多: Amjith Ramanujam 在 5 月 20 日在波特兰俄勒冈州举办的 PyCon US 2017 上的谈话“神奇的命令行工具”。


    作者简介:

    Amjith Ramanujam - Amjith Ramanujam 是 pgcli 和 mycli 的创始人。人们认为它们很酷,他表示笑纳赞誉。他喜欢用 Python、Javascript 和 C 编程。他喜欢编写简单易懂的代码,它们有时甚至会成功。

     

    转载于:https://www.cnblogs.com/DataArt/p/10022595.html

    展开全文
  • 本系列中有关使用Java解析命令行参数的第一篇文章介绍了Apache Commons CLI库。 这是本系列中介绍的基于Java的命令行解析库中最古老的,而且可能是最常用的之一。 Apache Commons CLI确实显示了它的时代,特别是与...
  • 图形界面->命令行 右键->打开终端,或者ctrl+alt+f2(f1~f7) 命令行->图形界面 ctrl+alt+f1
  • Py之GUI:Python下各种GUI(图形用户界面)简介、使用优缺点对比 目录 GUI Python下各种GUI简介、使用优缺点对比 ...Python下各种GUI更多官权威介绍 ... 图形用户界面(Graphical ...与早期计算机使用的命令行界面相...
  • Py之GUI:Python下各种GUI(图形...与早期计算机使用的命令行界面相比,图形界面对于用户来说在视觉上更易于接受。然而这界面若要通过在显示屏的特定位置,以”各种美观而不单调的视觉消息“提示用户”状态的改变“,...
  • python命令行补全

    2017-11-11 13:33:58
    python命令行补全 大家都知道,在命令行界面输入命令时,是可通过tab键来补齐命令,这中设置十分方便,不用浪费较长时间在输入命令上。最近开始接触python,发现在python命令行下,使用tab键是无法补全命令的。我们...
  • 对比起命令行界面来说,图形界面在交互性上有着不可比拟的优势.但在一些需要执行大量重复性工作的方面,例如在系统管理上,命令行界面提供的脚本功能,能够为用户节省大量的时间.除此以外,命令行界面占用系统资源少,能够...
  • 有时候,我们需要设定服务器启动的方式为命令行(不过一般是命令行),我做这个大数据的时候,由于物理机器的虚拟机跑起来比较慢,所以想用命令行的启动方式来,让系统更加速度的启动,init 5(图形界面),init3(命令...
  • rtorrent命令行使用

    千次阅读 2018-07-20 20:45:39
    如果你不使用torrent命令行客户端是担心它太复杂,那么,请重新考虑下。我相信一旦使用过了基于命令行的BT客户端,你就会离不开它:你可以非常轻松地在你的终端窗口启动和监控进度。在这篇文章中,我们将会介绍一个...
  • 缺点:sql脚本路径不能含中文 删除数据库 mysql> drop database lady_killer9; Query OK, 3 rows affected (0.11 sec) 图形化 新建查询->输入sql语句->运行即可 创建数据库 重连一下即可看见创建的数据库 也可这样...
  • edex-ui 命令行 在本文中,我将探讨命令行界面缺点-可发现性-以及克服此问题的几种方法。 我喜欢命令行。 我的第一个命令行是1997年的DOS 6.2。我学习了各种命令的语法,并展示了如何在目录( attrib )中列出...
  • 命令行下载

    2011-12-19 16:52:02
    对于喜欢命令行操作及追求高效率、高速度下载的朋友,推荐使用命令行下载工具。命令行工具不但使用方便,而且大多具有很高的下载速度及下载效率,尤其适合于大批量下载文件。下面就为大家详细介绍一下这些工具。  ...
  • 本人做的是一个图形界面的编译器,美其名曰IDE吧。 做到最后一步的时候,发现如何解释中间代码成了一个大问题!我有如下几种方案: 1,在IDE中调用解释程序,对中间代码进行解释执行。 2,通过自己的代码来模拟一...
  • 命令行界面 Command-line Interface(CLI) 工具, 一般指运行在文本终端(如 shell) 的程序, 通常接受各种输入作为参数(通常称为参数或子命令)以及选项(通常称为标志或开关)。 Python下命令行工具开发框架或工具...
  • 今天在现场看到这里买的是天融信的硬件防火墙,呵呵,我还是第一次看到...不过思科的netscree,和其他的PIX没有见识过,不知道是啥样子操作的,我原来还以为是 字符界面,全命令行来干活的呢,发现现在的工具越来越...
  • 1. 命令行基础 1. pwd 命令行 大多数人通过图形用户界面(GUI)...在GUI出现之前,与计算机交互的最常用方式是通过命令行界面,我们也将其称为shell或终端(我们将在此任务中互换使用这些术语)。命令行界面
  • 完全不用命令行

    2018-01-09 16:27:09
     据说命令行就是以前电脑的样子,而想想我刚接触电脑就用图形界面,不禁感慨。用惯了图形界面的人想必是看不惯命令行的吧?我也是见到那个黑框很久很久之后才知道“那不是个bug”——毕竟我对电脑的第一印象就是...
  • 控制台界面与GUI相比的优缺点

    千次阅读 2015-06-01 12:24:35
    3、程序的主要区别应该是入口函数不一样,因为界面显示所使用的类库不同。 4、 http://zhidao.baidu.com/question/8861937.html Windows编程的主要特点有: 图形界面 面向对象程序设计 事件驱动 高效的内存管理 ...
  • 命令行的使用方法

    2017-11-29 19:20:57
    命令行”的对立面是“图形界面”。为什么要使用命令行?优点:灵活,方便批处理 缺点界面不友好打开的方式点击“开始->程序->附件->命令提示符”或者在运行窗口输入“CMD”。基本的DOS命令最关键命令1,打开...
  • 命令行下载工具

    2014-11-20 15:49:35
     对于喜欢命令行操作及追求高效率、高速度下载的朋友,推荐使用命令行下载工具。命令行工具不但使用方便,而且大多具有很高的下载速度及下载效率,尤其适合于大批量下载文件。下面就为大家详细介绍一下这些工具。 ...
  • Windows 命令行基础

    2017-07-13 08:31:50
    引言:为什么要使用命令行2. 文件系统基础 2.1 分区与盘符2.2 文件与名称2.3 文件的目录管理2.4 绝对路径和相对路径 3. 基本命令 3.1 目录操作命令3.2 文件操作命令3.3 通配符3.4 命令输入技巧 4. 一些较高级的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 32,696
精华内容 13,078
关键字:

命令行界面的缺点