web-dev-qa-db-ja.com

ファブリックタスクの作業ディレクトリを設定するにはどうすればよいですか?

リモートサーバー上のファイルを一覧表示する簡単なタスクを定義するとします。

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はまったく初めてです。

25
Roberto Aloi

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')
44
Daniel Hepper

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ドキュメント でカバーされています。

8
John Doe