2014-07-04 4 views
0

을하는 동안 -서브 프로세스의 표준 출력과 표준 에러 나 원격 서버의 디스크 사용량을 알고 싶어하고 내가 ssh를 여기 내가 지금까지 한 일이다를 사용하여 그 일을 생각 ssh를

def disk_usage(server): 
    msg="" 
    ps = subprocess.Popen(["ssh", "-o", "BatchMode=yes", "-l", "mygroup", server, "df -k /some/directory"], stdout=subprocess.PIPE) 
    out, err = ps.communicate() 
    if err != None: 
     msg += "\n"+err 
    else: 
     msg = out 
    return msg 

Final_msg = "" 
server_list= ['server A','server B','server C'] 

for server in server_list: 
    Final_msg+="For Server :"+server+"\n"+disk_usage(server) 
print Final_msg 

스크립트는 잘 작동,

For Server A : 
Filesystem   1K-blocks  Used  Available  Use% Mounted on 
/dev/cfd/ace  8064048   3581524 4072892   47%  /app 
For Server B : 

For server C : 
Filesystem   1K-blocks  Used  Available  Use% Mounted on 
/dev/wsa/ace  306423   244524 23243434  90%  /app 

여기에 서버 B에 대한 SSH를하지 구성 -이 :하지만 문제는 모든 서버에 대한 SSH를 그냥

출력 해당 서버의 빈 출력을 표시 구성되지 않은 경우입니다 d 그래서 모든 빈 ssh 연결에 대해 batchmode가 (BatchMode=yes)에 있기 때문에 빈 출력이 나옵니다. 그러나 사용자에게 출력이 없었던 이유를 알리고 싶습니다.

내가 ssh를 내가 아래 오류 얻을 구성되지 단절의 쉘에서 동일한 명령을 실행하면

Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password). 

내가 특정 서버 곳의 스크립트의 내 출력에 동일한 오류를 원한다을 ssh가 구성되지 않았습니다.

어떤 아이디어가 있습니까?

답변

0

오류가 발생했는지 확인하려면 Popen 개체의 returncode 특성 (ps)을 확인해야합니다.

stderr의 출력을 얻으려면 stdout과 마찬가지로 stderr=subprocess.PIPE을 Popen에 전달해야합니다.

0

로컬 컴퓨터에 정적 IP가있는 경우 데이터 사용 스크립트가 로컬 컴퓨터에 연결되어 데이터를 전달할 수 있도록 소켓을 사용하는 것이 좋습니다. 또는 urllib를 통해 웹 정보에 서버 정보를 게시 할 도메인이있는 경우