我想知道远程服务器的磁盘使用情况,我想用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
这里没有配置服务器B的ssh所以我得到一个空白输出,因为所有ssh连接的批处理模式都打开了(BatchMode=yes
),但我希望用户知道为什么没有输出。
当我在没有配置ssh的服务器的shell上运行相同的命令时,我得到以下错误:
Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).
我想在没有配置ssh的特定服务器的脚本输出中出现相同的错误。
任何想法?
答案 0 :(得分:0)
要检测是否发生了错误,您应该检查Popen对象的returncode
属性(ps
)。
要获得stderr
的输出,您必须将stderr=subprocess.PIPE
传递给Popen,就像对stdout
一样。
答案 1 :(得分:0)
如果您的本地计算机具有静态IP,我建议使用套接字,以便您的数据使用脚本将连接到本地计算机并提供数据。 或者,如果您有域名,可以通过urllib将您的服务器信息发布到您的网络应用程序。