0
我用布給我寫rsync的包裝,變量env.host_string將被執行()來運行任務進行設置。爲了得到env.host_string,我跑( 'PWD')第一,並運行rsync的。如何迫使織物運行之前,連接到遠程主機()執行?
,纔有可能確保用戶組env.hosts之前的一些檢查站抵達,如病情SRC == env.host_string?
from fabric.api import run, env, task, abort
from string import Template
@task
def sync_to_same_dir(src, path):
env.host_string
cmd_template = Template("""rsync --dry-run -e ssh -avr [email protected]$src_host:$path/ $path/""")
if path.endswith("/"):
path = path[:-1]
run("pwd") # it's a work around
if src == env.host_string:
abort("cannot rysnc to the same host")
cmd = cmd_template.substitute(path=path, user=env.user, src_host=src)
run(cmd)
我覺得從面料的源代碼的答案。有一個簡單的想法:如何運行檢查主機需要的?
@needs_host
def put(local_path=None, remote_path=None, use_sudo=False,
mirror_local_mode=False, mode=None):
"""
Upload one or more files to a remote host.
"""
我跟蹤needs_host它會詢問主機,當用戶沒有指定任何主機:
No hosts found. Please specify (single) host string for connection:
我們可以重寫任務爲:
from fabric.network import needs_host
@task
@needs_host
def the_task_needs_host(): pass
感謝答覆,但我想,以確保用戶已設置的主機之前的一些方法調用或檢查點。我會改進我的問題。 – qrtt1 2012-07-15 07:06:31
它只是python。所以檢查:如果env.hosts不是None:...;就足夠了。 – Morgan 2012-07-15 18:44:42
我在源代碼中找到解決方案:) – qrtt1 2012-07-16 13:29:51