如何获得一个知道Fabric已应用的任何上下文管理器的交互式shell?
例如,我希望这会在/tmp/
打开一个带有virtualenv活动的shell:
with cd("/tmp/"):
with prefix("source virtualenv/bin/activate"):
open_shell()
但这不是 - 它只是打开一个普通的登录shell。
使用run("bash")
获得了一半,但没有设置PS1
,并且所有行都以Fabric [user@host] out: …
为前缀。
PS:是的,我知道我可以使用open_shell(command="cd /tmp/; source …")
,但我想要一个通用的解决方案。
答案 0 :(得分:0)
Fabric open_shell
函数不支持此功能。
如果您需要,可能需要编写自己的包装器open_shell
首先检查env.cwd
和env.command_prefixes
,然后生成command
,然后再生成open_shell
传递给{{1}}。
答案 1 :(得分:0)
这是我的实用工具:
def smart_shell(command=''):
env_commands = "cd '%s'; %s" % (env.cwd, " && ".join(env.command_prefixes))
open_shell('%s; %s' % (env_commands, command))
# Usage
with cd('/tmp/'), prefix("source virtualenv/bin/activate"):
smart_shell('./manage.py shell')