2012-11-19 2 views
2

Fabric을 처음 사용하기 때문에 허가가없는 디렉토리에 CD를 넣으려고합니다. 따라서 sudo을 사용하고 있습니다. (디렉토리에 대한 사용 권한은 drwx ------, 즉 700입니다.)sudo cd를 Fabric 디렉토리에 넣습니다.

저는 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를 실행하는 청각 장애를 가지고 있어야"제공 :

나는이 시도. 나는 또한이 시도했습니다

싹둑 :

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

그러나 이것은 "거부 권한을"다시 이해를 반환합니다.

간단히 말해서 Fabric 내에 "sudo cd"이 있습니까?

답변

3

cd은 쉘 내장 명령이고 sudo으로 실행할 수있는 실제 프로그램이 아니기 때문입니다. 당신은 with cd(...):으로 바른 길을 가고있었습니다. 인정 하듯이 나는 아직 그것을 자신을 시도하지 않은 있지만, 나는이 작동 생각

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

: 같은 것을보십시오. cd 컨텍스트 관리자가 작동하는 방식은 run() 또는 sudo()으로 실행되는 명령 앞에 cd <dirname> &&을 앞에 붙이기 때문입니다.

3

sudo()을 사용하고 있지 않은 이유가 있습니까? 현재 가지고있는 문제를 해결할 수 있습니다.

는 1.0 전에 원단의 버전을 사용하는 경우, 당신이 필요합니다 명시 적으로 tell it to create a TTY : 그렇지 않으면

sudo("ls", pty=True) 

, 당신이 당신의 sudoers 파일을 편집하고이 행을 제거하거나 주석 처리해야 할 수도 있습니다

Defaults requiretty 

가되어야한다 또한

#Defaults requiretty 

, 더 성가신 수 있으며, B with cd(...)이 문제가 발생 유타, 당신은 항상 ls에 인수로 경로를 전달할 수 있습니다 ("LS sudo는 : 나는 데프 테스트()를했을 때"전역 이름 'sudo는'정의되지 않은 나가서 설명하자면 NameError는 "

sudo("ls /my/dir") 
+0

내가 얻을 ", pty = True) - 구문이 잘못되었을 수 있습니다. – ibash

+0

@ user1283693'run'과 같이 가져올 필요가 있습니다 :'from fabric.api import run, env, sudo' –

+0

"syntax"가 틀린 경우 Python에서'SyntaxError'를 얻을 수 있습니다 : – Iguananaut