リモートサーバー上のファイルを一覧表示する簡単なタスクを定義するとします。
from fabric.api import run, env
env.use_ssh_config = True
def list_files():
run('ls')
そして私はそれを実行します:
fab -H server list_files
実行しているコマンドの作業ディレクトリを指定するには、次の方法があります。
run('cd /tmp && ls')
どれが私にはあまり慣用的に見えませんか?
免責事項:私は人生で初めてFabricを見ていますが、Pythonはまったく初めてです。
Context Manager cd
を使用します:
from fabric.api import run, env
from fabric.context_managers import cd
env.use_ssh_config = True
def list_files():
with cd('/tmp'):
run('ls')
fabric 2.4.0
の回答は次のようになります:
from fabric import Connection
conn = Connection(Host=HOST_NAME, user=USER_NAME, connect_kwargs={'password': PASSWORD})
with conn.cd('/tmp/'):
conn.run('ls -la')
これはfabric
ドキュメントではカバーされていませんが、 invoke
ドキュメント でカバーされています。