2014-07-04 36 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 

该脚本工作正常,但问题是,当对于任何服务器的SSH未配置它只是显示一个空白的输出为该服务器

输出: -

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 

这里SSH服务器B不配置d所以我得到一个空白输出,因为批处理模式为(BatchMode=yes)所有的SSH连接,但我想让用户知道为什么没有输出。

当我运行在外壳上的,其中SSH是未配置,我得到下面的错误的服务器相同的命令:

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

我希望同样的错误在我的脚本输出特定的服务器里ssh没有配置。

有什么想法?

回答

0

要检测到发生了错误,应检查Popen对象的returncode属性(ps)。

要得到stderr的输出,您必须将stderr=subprocess.PIPE传递给Popen,就像您为stdout一样。

0

如果您的本地计算机有静态IP我建议使用套接字,以便您的数据使用脚本将连接到本地计算机并传递数据。 或者如果您有域名通过urllib将您的服务器信息发布到您的网络应用程序。