3

私は Fabric を初めて使用し、権限のないディレクトリに cd しようとしているので、sudo. (ディレクトリのパーミッションは drwx------、つまり 700 です)

Fabric 0.9.7 を使用しています。

私はこれを試しました:

from fabric.api import run, env
from fabric.context_managers import cd

env.hosts = [ '1.2.3.4' ]
env.user = 'username'

def test():
       run('sudo cd /my/dir')
              run('ls')

しかし、これにより、「申し訳ありませんが、sudoを実行するにはttyが必要です」という理解が得られます。私もこれを試しました:

をちょきちょきと切る:

def test():
        with cd('/my/dir'):
                run('ls')

しかし、これは「許可が拒否されました」を返します。これも理解できます。

簡単に言えば、Fabric 内でどのようにすればよいのsudo cdでしょうか?

4

3 に答える 3

3

これはcd、シェルビルトインコマンドであり、で実行できる実際のプログラムではないためsudoです。あなたは。で正しい軌道に乗っていましたwith cd(...):。次のようなものを試してください:

with cd('/my/dir'):
    sudo('ls')

確かに私はまだ自分で試していませんが、それでうまくいくと思います。これは、cdコンテキストマネージャーが機能する方法が、またはcd <dirname> &&で実行されるコマンドの前に追加することであるためです。run()sudo()

于 2012-11-19T16:59:42.290 に答える
3

を使用していない理由はありますsudo()か? あなたが抱えている問題を回避できるかもしれません。

Fabric の 1.0 より前のバージョンを使用している場合は、TTY を作成するよう明示的に指示する必要があります。

sudo("ls", pty=True)

それ以外の場合は、sudoers ファイルを編集して、次の行を削除またはコメントアウトする必要がある場合があります。

Defaults    requiretty 

次のようにする必要があります。

#Defaults    requiretty

また、面倒かもしれませんが、with cd(...)問題が発生する場合は、いつでも引数としてパスを渡すことができますls:

sudo("ls /my/dir")
于 2012-11-19T17:05:52.683 に答える