1. 程式人生 > >pyqt遠端批量執行Linux命令程式

pyqt遠端批量執行Linux命令程式

寫了個小程式:

功能

1.測試遠端ssh連線是否成功,

2.批量執行遠端ssh命令

效果如下:


程式碼如下:

#-*- coding:utf-8 -*-
import sys
from PyQt4 import QtCore, QtGui, uic
import locale
import re
import os
from PyQt4.QtCore import *
from PyQt4.QtGui import *
import paramiko
qtCreatorFile = "test.ui" # Enter file here.

Ui_MainWindow, QtBaseClass = uic.loadUiType(qtCreatorFile)
a = 0
username_list = []
ip_list = []
password_list = []
class MyApp(QtGui.QMainWindow, Ui_MainWindow):
    def __init__(self):
        QtGui.QMainWindow.__init__(self)
        Ui_MainWindow.__init__(self)
        self.setupUi(self)
        self.add.clicked.connect(self.add_info)
        self.test.clicked.connect(self.test_link)
        self.do_2.clicked.connect(self.do_command)
    def add_info(self):
        global a
        ip = self.ip.text()
        ip_list.append(ip)
        username = self.username.text()
        username_list.append(username)
        password = self.password.text()
        password_list.append(password)
        self.table.setHorizontalHeaderLabels(['ip','username','password'])
        newItem = QTableWidgetItem(ip)  
        self.table.setItem(a, 0, newItem)
          
        newItem = QTableWidgetItem(username)  
        self.table.setItem(a, 1, newItem)  
          
        newItem = QTableWidgetItem(password)  
        self.table.setItem(a, 2, newItem)
        a += 1
    def test_link(self):
        ip = str(self.ip.text())
        username = str(self.username.text())
        password = str(self.password.text())
        try:
            ssh = paramiko.SSHClient()
            ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
            ssh.connect(ip, 22, username, password)
            stdin, stdout, stderr = ssh.exec_command("who")
            print stdout.read()
            search = re.search(stdout.read(), username)
            if search:
                info = u"連線成功"
            else:
                info = u"連線失敗"
        except:
            info = u"連線失敗"
        print info
        self.state.setText(info)
        ssh.close()

    def do_command(self):
        command = str(self.command.text())
        ssh = paramiko.SSHClient()
        ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
        for i in range(len(ip_list)):
            ip = str(ip_list[i])
            username = str(username_list[i])
            password = str(password_list[i])
            ssh.connect(ip, 22, username, password)
            stdin, stdout, stderr = ssh.exec_command(command)
            info = stdout.read()
            self.result.append(info)

        ssh.close()




if __name__ == "__main__":
    app = QtGui.QApplication(sys.argv)
    mycode = locale.getpreferredencoding()
    code = QTextCodec.codecForName(mycode)
    QTextCodec.setCodecForLocale(code)
    QTextCodec.setCodecForTr(code)
    QTextCodec.setCodecForCStrings(code)
    window = MyApp()
    window.show()
    sys.exit(app.exec_())