第十四章:应用构建模块-readline: GNU readline库-配置readline

14.3 readline: GNU readline库
readline模块提供了GNU readline库的一个接口。它可以用于改进交互式命令行程序,使之更易于使用,例如,增加命令行文本完成,即"tab完成"功能(tab completion)。

说明:由于readline与控制台内容交互,所以如果打印调试消息,则会很难看出哪些是示例代码完成的工作,而哪些是radline自动完成的工作。下面的例子使用logging模块将调试信息写到一个单独的文件。每个示例都会显示日志输出。
说明:默认情况下,并非所有平台都提供readline所需的GNU库。如果你的系统确实不包括这些库,那么在安装依赖库之后可能需要重新编译Python解释器以启用这个模块。Pyhton Package Index在gnureadline名之下还发布了这个库的一个独立版本。

14.3.1 配置readline
有两种方法配置底层radline库,可以使用一个配置文件,或者利用parse_and_bind()函数。配置选项包括调用完成特性的按键绑定,编辑模式(vi或emacs),以及其他一些值。有关的详细信息可以参考GNU Readline库的文档。

try:
    import gnureadline as readline
except ImportError:
    import readline

readline.parse_and_bind('tab: complete')
readline.parse_and_bind('set editing-mode vi')

while True:
    line = input('Prompt ("stop" to quit):')
    if line == 'stop':
        break
    print('ENTERED: {!r}'.format(line))

这个配置可以作为指令存储在一个文件中,由库通过一个调用来读取。如果myreadline.rc包含以下内容。

# Turn on tab completion.
tab: complete
# Use vi editing mode instead of emacs.
set editing-mode vi

则可以用read_init_file()来读取这个文件。

try:
    import gnureadline as readline
except ImportError:
    import readline

readline.read_init_file('myreadline.rc')

while True:
    line = input('Prompt ("stop" to  quit): ')
    if line == 'stop':
        break
    print('ENTERED: {!r}'.format(line))

猜你喜欢

转载自blog.csdn.net/weixin_43193719/article/details/93512791
今日推荐