Python Virtualenvwrapper的“workon”和Zsh

时间:2013-08-21 06:28:53

标签: python zsh virtualenvwrapper

我使用名为virtualenvwrapper的{​​{1}}创建了一个virtualenv。当我输入augpy时,它工作正常并正确激活。但是,当我尝试单独使用workon augpy列出virtualenvs时,我得到一个奇怪的输出:

workon

我不知道为什么会这样 - 也许它对我正在使用的shell感到困惑?我目前正在使用zsh(5.0.2,OSX 10.8)和$ workon ]7;file://new-host.home/Users/Me/.virtualenvsaugpy 作为我的默认shell。当我在 bash 中输入oh-my-zsh时,我会得到正确的结果(并且自动完成功能也可以):

workon

我应该为zsh设置具体的内容吗?

2 个答案:

答案 0 :(得分:2)

这是部分答案,我很害怕。

你看到的问题与oh-my-zsh无关。该问题在virtualenvwrapper.sh的第539行引入。

在zsh中调用的子shell返回STDOUT上的最后一个工作目录,包含在控制字符中。这很容易验证:

(cd /) | cat -v

我无法在任何地方找到此功能。也许它是最近推出的,比如zsh 5.0?

fmt中的virtualenvwrapper_show_workon_options()函数中调用的virtualenvwrapper.sh命令使得此返回路径可见,从而搞砸了输出。

更新

由evadeflow在下面的评论提示,我做了一些进一步挖掘,发现实际问题在于我改变OS X终端代理图标的方式。实际上,事实证明,oh-my-zsh使用完全相同的方法。在撰写本文时,我已经在GitHub上提交了一个pull请求,以便在oh-my-zsh中修复此问题。

答案 1 :(得分:0)

这也可以通过将控制字符保护的路径发送到STDERR而不是STDOUT来解决。

在之前链接的macworld提示中,这需要将命令printf '\e]7;%s\a' "$PWD_URL"更改为printf '\e]7;%s\a' "$PWD_URL" 1>&2