Python 使用织物&x27;s使用上下文管理器(如';前缀';和';cd&x27;应用
我怎样才能得到一个交互式shell,它知道任何已应用的Fabric上下文管理器 例如,我希望这会在Python 使用织物&x27;s使用上下文管理器(如';前缀';和';cd&x27;应用,python,fabric,Python,Fabric,我怎样才能得到一个交互式shell,它知道任何已应用的Fabric上下文管理器 例如,我希望这会在/tmp/中打开一个shell,其中virtualenv处于活动状态: with cd("/tmp/"): with prefix("source virtualenv/bin/activate"): open_shell() 但事实并非如此——它只是打开了一个普通的登录shell 使用run(“bash”)可以达到一半,但是没有设置PS1,所有行都以Fabric的[use
/tmp/
中打开一个shell,其中virtualenv处于活动状态:
with cd("/tmp/"):
with prefix("source virtualenv/bin/activate"):
open_shell()
但事实并非如此——它只是打开了一个普通的登录shell
使用run(“bash”)
可以达到一半,但是没有设置PS1
,所有行都以Fabric的[user@host]输出:…
PS:是的,我知道我可以使用
open_shell(command=“cd/tmp/;source…”)
,但我需要一个通用的解决方案。Fabric的open_shell
功能不支持此功能
如果您想这样做,您可能需要将自己的包装器写入
open\u shell
,首先检查env.cwd
和env.command\u前缀
,以便生成命令
,然后将其传递到open\u shell
以下是我的实用程序:
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')
通过键入它们并按Enter键。如果您的意思是自动,那么您不应该打开shell而只使用
run()
,