傳遞結構env.hosts sting作爲變量在函數中不起作用。傳遞結構env.hosts sting作爲變量在函數中不起作用
demo.py
#!/usr/bin/env python
from fabric.api import env, run
def deploy(hosts, command):
print hosts
env.hosts = hosts
run(command)
main.py
#!/usr/bin/env python
from demo import deploy
hosts = ['localhost']
command = 'hostname'
deploy(hosts, command)
蟒蛇main.py
['localhost']
No hosts found. Please specify (single) host string for connection:
但env.host_string作品!
demo.py
#!/usr/bin/env python
from fabric.api import env, run
def deploy(host, command):
print host
env.host_string = host
run(command)
main.py
#!/usr/bin/env python
from demo import deploy
host = 'localhost'
command = 'hostname'
deploy(host, command)
蟒蛇main.py
localhost
[localhost] run: hostname
[localhost] out: heydevops-workspace
但env.host_string是不夠的我們來說,這是一臺主機。 也許我們可以在一個循環內使用env.host_string,但這並不好。 因爲我們也想設置併發任務編號並且並行運行它們。
現在ddep(我的配置引擎),我只用MySQLdb的獲得則參數,如執行晶圓廠命令:
os.system("fab -f service/%s.py -H %s -P -z %s %s" % (project,host,number,task))
這是一個簡單的方法,但並不好。 因爲如果我使用fab命令,我無法捕捉Python中結果的異常和失敗,使我的ddep可以「重試」失敗的主機。 如果我使用「from demo import deploy」,我可以通過Python中的一些代碼來控制和獲取它們。
所以現在「env.host」是麻煩。有人可以給我一個解決方案嗎? 非常感謝。
非常感謝亞歷山大!我自己修復它,然後發現我們的方式是一樣的。 – mcsrainbow 2013-04-25 10:00:24
太棒了,這對我也很有用。謝謝! – xamox 2015-10-06 15:52:21