Linux上的Python cmd不会自动完成特殊字符或符号

Linux上的Python cmd不会自动完成特殊字符或符号,第1张

概述诸如 – 等的字符不会被 Python的基于readline的cmd模块解析为与字母数字ASCII字符相同的方式.这似乎只是Linux特定的问题,因为它似乎在Mac OS上按预期工作. 示例代码 import cmdclass Test(cmd.Cmd): def do_abc(self, line): print line def complete_abc( 诸如 – 等的字符不会被 Python的基于readline的cmd模块解析为与字母数字ASCII字符相同的方式.这似乎只是linux特定的问题,因为它似乎在Mac OS上按预期工作.

示例代码

import cmdclass Test(cmd.Cmd):    def do_abc(self,line):        print line     def complete_abc(self,text,line,begIDx,endIDx):        return [i for i in ['-xxx','-yyy','-zzz'] if i.startswith(text)]try:    import readlineexcept importError:    print "Module readline not available."else:    import rlcompleter    if 'libedit' in readline.__doc__:        readline.parse_and_bind("bind ^I rl_complete")    else:        readline.parse_and_bind("tab: complete")test().cmdloop()

Mac OS上的预期行为

(Cmd) abc <TAB>abc  (Cmd) abc -<TAB>-xxx  -yyy  -zzz  (Cmd) abc -x<TAB>(Cmd) abc -xxx

linux上的行为不正确

(Cmd) abc <TAB>abc  (Cmd) abc -x<TAB> <nothing>(Cmd) abc -<TAB> (Cmd) abc --<TAB>(Cmd) abc ---<TAB>(Cmd) abc ----

我尝试添加 – 到cmd.Cmd.IDentchars,但它没有帮助.

cmd.Cmd.IDentchars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMnopQRSTUVWXYZ0123456789_-'

为什么Mac OS和linux之间的readline解析存在差异,即使它们都使用GNU readline:

苹果系统:

>>> readline.__doc__'importing this module enables command line editing using GNU readline.'

linux的:

>>> readline.__doc__'importing this module enables command line editing using GNU readline.'

谢谢!

解决方法 在linux上,readline模块考虑 – 选项卡完成的分隔符.也就是说,在遇到 – 后,将尝试新的完成.

解决问题的方法是从readline用作分隔符的字符集中删除.

例如.

old_delims = readline.get_completer_delims()readline.set_completer_delims(old_delims.replace('-',''))
总结

以上是内存溢出为你收集整理的Linux上的Python cmd不会自动完成特殊字符或符号全部内容,希望文章能够帮你解决Linux上的Python cmd不会自动完成特殊字符或符号所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/yw/1023861.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存