2017-09-24 56 views
0

与Python 2.7的工作这是.pythonrc.py文件,我建立了我的笔记本电脑运行Debian测试的内容:.pythonrc.py不是在MacOS

import os, readline, rlcompleter, atexit 
history_file= os.path.join(os.environ['HOME'], '.python_history') 
try: 
    readline.read_history_file(history_file) 
except IOError: 
    pass 
readline.parse_and_bind("tab: complete") 
readline.parse_and_bind('"\e[A": history-search-backward') 
readline.parse_and_bind('"\e[B": history-search-forward') 
readline.parse_and_bind('"C-\e[A": reverse-search-history') 
readline.parse_and_bind('"C-\e[B": forward-search-history') 

readline.set_history_length(8000) 
atexit.register(readline.write_history_file, history_file) 

del os, readline, rlcompleter, atexit, history_file, __file__ 

我有相同的文件的副本到我MacBook上运行MacOS的塞拉利昂,与.profile文件相结合,在这里附:

HISTCONTROL=ignoreboth 

HISTSIZE=2000 
HISTFILESIZE=4000 

bind '"\e[A": history-search-backward' 
bind '"\e[B": history-search-forward' 
bind '"C-\e[A": reverse-search-history' 
bind '"C-\e[B": forward-search-history' 

alias pythonic='python -i -c "from user import *"' 

PYTHONSTARTUP=$HOME/.pythonrc.py 

上猛砸自动完成和历史搜索能正常工作,但同样的功能似乎通过pythonic别名运行的Python当预期到不行。如果可能的话,有人可以向我解释这种行为的原因以及如何解决它?

回答

1

in MacOSreadline moudle use libedit instead of GNU readline,它具有不同的配置语法。

您可以安装gnureadlinepackage,或使用自制软件安装使用GNU readline的新python二进制文件,或更改您的rc配置文件。

为您指定-c 'import user',该user模块的外观和执行.pythonrc.py,功能PYTHONSTARTUP做,所以你只需要一个。

此外,在~/.profile定义shell变量是bash进程本身可行,但是Python运行作为庆典的一个子进程,必须导出PYTHONSTARTUP,以使其可用于蟒蛇:

export PYTHONSTARTUP=$HOME/.pythonrc.py 
+0

感谢您的建议,但也出口'PYTHONSTARTUP'环境变量,'pythonic'一直不工作。 – rudicangiotti

+0

尝试'env | grep'PYTHONSTARTUP'检查var是否存在,如果不存在,请检查'.profile'是否被执行。 – georgexsh

+0

'grep'返回变量,所以它被定义。 – rudicangiotti

1

我会建议将您的键绑定添加到.inputrc,任何使用Readline库的应用程序都会使用它。那么你不需要将它们添加到.profile.pythonrc.py

格式是不同的(和稍微简单一些):

"\e[A": history-search-backward 
"\e[B": history-search-forward 
"C-\e[A": reverse-search-history 
"C-\e[B": forward-search-history 

set history-size 8000 

(readline库本身不会从读取或写入到一个历史文件关注自身,所以这部分将需要留在你的Python的rc文件)。

+0

Python控制台的行为保持不变。 – rudicangiotti