如何在ipython提示符下显示当前目录

时间:2016-07-20 12:36:41

标签: python ipython prompt

是否有办法在IPython提示符下显示当前目录?

Instead of this:
In [1]:

Something like this:
In<~/user/src/proj1>[1]:

4 个答案:

答案 0 :(得分:15)

您可以使用os.getcwd(当前工作目录)或使用本机os命令pwd

In [8]: import os

In [9]: os.getcwd()
Out[9]: '/home/rockwool'

In [10]: pwd
Out[10]: '/home/rockwool'

答案 1 :(得分:2)

https://ipython.org/ipython-doc/3/config/details.html#specific-config-details

  

在终端中,可以自定义输入和输出提示的格式。目前这不会影响其他前端。

所以,在.ipython / profile_default / ipython_config.py中,输入如下内容: c.PromptManager.in_template = "In<{cwd} >>>"

答案 2 :(得分:2)

使用!在pwd显示当前目录之前

In[1]: !pwd
/User/home/

交互式计算时,通常需要访问底层外壳。这可以通过使用感叹号来实现! (或爆炸)在行首出现时执行命令。

答案 3 :(得分:1)

假设您有兴趣为随后的ipython的所有调用配置此配置,请运行以下命令(在传统的shell中,如bash :))。它会附加到您的默认ipython配置,并在必要时创建它。配置文件的最后一行还将自动使$ PATH中的所有可执行文件都可以简单地在python中运行,如果您在提示符下询问cwd的话,您可能还希望这样做。因此,您无需运行它们就可以运行它们!字首。已通过IPython 7.18.1测试。

mkdir -p ~/.ipython/profile_default
cat >> ~/.ipython/profile_default/ipython_config.py <<EOF

from IPython.terminal.prompts import Prompts, Token
import os

class MyPrompt(Prompts):
    def cwd(self):
        cwd = os.getcwd()
        if cwd.startswith(os.environ['HOME']):
            cwd = cwd.replace(os.environ['HOME'], '~')
            cwd_list = cwd.split('/')
            for i,v in enumerate(cwd_list):
                if i not in (1,len(cwd_list)-1): #not last and first after ~
                    cwd_list[i] = cwd_list[i][0] #abbreviate
            cwd = '/'.join(cwd_list)
        return cwd

    def in_prompt_tokens(self, cli=None):
        return [
                (Token.Prompt, 'In ['),
                (Token.PromptNum, str(self.shell.execution_count)),
                (Token.Prompt, '] '),
                (Token, self.cwd()),
                (Token.Prompt, ': ')]

c.TerminalInteractiveShell.prompts_class = MyPrompt
c.InteractiveShellApp.exec_lines = ['%rehashx']
EOF

(c.PromptManager仅在旧版本的ipython中起作用。)