美文网首页python之路
使用Paramiko远程执行python脚本

使用Paramiko远程执行python脚本

作者: 非鱼2018 | 来源:发表于2020-11-14 11:44 被阅读0次

python脚本执行需要依赖python环境、使用的第三方库以及其他一些第三方工具。
可以使用pyinstaller将python脚本打包成exe可执行文件
但如果脚本还要依赖其他一些软件,比如git,等,
因此可以使用远程执行,在远程执行机安装好执行脚本需要的所有环境,软件、依赖库等
然后本地只需要安装paramiko库,在远程机器执行python脚本,并下载生成文件等操作

远程执行python文件,并下载执行结果

class Ssh():

    def __init__(self, work_dir='home', host='192.168.0.106', port=22, username='root', pwd='123456'):
        self.host = host
        self.port = port
        self.username = username
        self.pwd = pwd
        self.__transport = None
        self.work_dir = work_dir
        self.sftp = None
        self.tmpdir = 'tmp'
        self.py_file = 'run_remote.py'

    def connect(self):
        transport = paramiko.Transport((self.host, self.port))
        transport.connect(username=self.username, password=self.pwd)
        self.__transport = transport

    def mkdir(self):
        sftp = paramiko.SFTPClient.from_transport(self.__transport)
        if not os.path.exists(os.path.join(self.work_dir, self.tmpdir)):
            sftp.mkdir(self.work_dir)
        sftp.chdir(self.work_dir)
        self.sftp = sftp

    def upload(self, filename):
        sftp = paramiko.SFTPClient.from_transport(self.__transport)
        # 本地文件上传至工作目录
        sftp.put(filename, os.path.join(self.work_dir, os.path.basename(filename)))

    def down(self, *filename):
        sftp = paramiko.SFTPClient.from_transport(self.__transport)
        # 下载工作目录文件到当前文件夹
        for file in filename:
            sftp.get(os.path.join(self.work_dir, file), filename)

    def cmd(self, command):
        ssh = paramiko.SSHClient()
        ssh._transport = self.__transport
        stdin, stdout, stderr = ssh.exec_command(command)
        result = stdout.read()
        if result:
            print("Result:", result)
        if stderr:
            print("Error:", stderr)
        return result

    def close(self):
        self.__transport.close()
        self.sftp.remove(self.work_dir)  # 执行完后删除临时文件夹

    def run(self):
        self.connect()
        self.mkdir()
        self.upload(self.py_file)
        self.cmd('python run_remote.py')
        # files=['result.html','err.log']
        # self.down(*files)
        self.close()


if __name__ == '__main__':
    obj = Ssh()
    obj.run()

相关文章

网友评论

    本文标题:使用Paramiko远程执行python脚本

    本文链接:https://www.haomeiwen.com/subject/agmfbktx.html