新手问一个关于 fabric 的问题

2016-09-13 18:24:35 +08:00
 laoyur
from fabric.api import *

@task()
def pi_test():
    run('VAR1=hehe')
    run('echo $VAR1')
[pi@pi.local] Executing task 'pi_test'
[pi@pi.local] run: VAR1=hehe
[pi@pi.local] run: echo $VAR1
[pi@pi.local] out: 
[pi@pi.local] out: 

Done.

请问怎么才能让 run('echo $VAR1') 成功输出 hehe 来,可以做到吗?

2292 次点击
所在节点    Python
5 条回复
zz1956
2016-09-13 19:46:55 +08:00
#run('VAR1=hehe && echo $VAR1')

或者

VAR1= 'hehe'

@task()
def test1():
run('echo %s' %VAR1)
hanks315
2016-09-13 20:14:48 +08:00
laoyur
2016-09-13 20:23:08 +08:00
@zz1956
@hanks315
感谢回复

shell_env 是可以:
@task()
def pi_test():
with shell_env(VAR1='hehe'):
run('echo $VAR1')
但是这样很烦,本来 shell 自己的上下文逻辑,硬生生用 python 给拼接起来了,跟 zz1956 说的第二种方法类似

我还是仿冒一下 zz1956 的第一种方案吧:

@task()
def pi_test():
sh = '''
VAR1=hehe
echo $VAR1
'''
run(sh)
siteshen
2016-09-14 13:53:18 +08:00
def hehe():
with prefix('VAR1=hehe'):
run('echo $VAR1')
zonghua
2016-09-18 15:47:54 +08:00
没什么经验,结果我在 Java 的工程里也用 fabric 去部署

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/306003

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX