2012-06-04 123 views
0

我很抱歉我的英文不好。 我搜索我的問題的解決方案有一天,但沒有找到。使用python ssh運行本地shell腳本到遠程

這是我的問題: 我有一些經理shell腳本在服務器-A。 我使用

ssh [email protected]_server_ip < shell_script.sh 

運行正常。

我想在python中做到這一點。 我是測試這一點:

1\paramiko, 'exec_command (str)' is only run ONE command.and i use stdin to invoke_shell,not ok 
2\pexect,sendline() is only ONE command. 

請幫幫我,謝謝!

(一些AIX不支持SFT,所以我不希望使用SFTP腳本到其他服務器。)

這樣的shell腳本:

#!/bin/sh 
if [ $# -lt 1 ] 
os=`uname` 
if [ "$os" = "linux" ] || [ "$os" = "Linux" ] 
then 
    temp=`df -P $diskname| tail -1` 
    if [ "$temp" = "" ] 
    then 
    echo "error!t=$diskname not found" 
    exit 0 
    fi 
    # diskutil=`echo $temp|awk '{printf("%s",$5)}'|awk '{gsub("%",""); print $0}'` 
    disk_size=`echo $temp | awk '{print $2}'` 
    disk_size_mb=`expr $disk_size/1024` 
    disk_size=`echo | awk '{ printf("%.2f",(c1/1024.0)) }' c1=$disk_size_mb` 
    disk_size="${disk_size}" 

elif [ "$os" = "SunOS" ] 
then 
    temp=`df -k $diskname | tail -1` 
    .... 

elif [ "$os" = "AIX" ] || [ "$os" = "aix" ] 
then 
    temp=`df -k $diskname |tail -1|sed -e "s/%//g"` 
    .... 
else 
    echo "error!!=Unsupported platform: $os" 
    exit 
fi 

echo "Total Size=$disk_size_mb" 

回答

0

如果只是觸發從Python的腳本是足夠,請使用標準庫中的subprocess.call。從看你的腳本,我猜它正在一些遠程主機上運行,​​可能是並行的。您可能想看看優秀的fabric模塊。這是一個圍繞paramiko的包裝,它極大地方便了本地和遠程運行命令以及上下文件傳輸。

+0

謝謝simon.I會找到面料和測試。 –