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()
网友评论