为什么要这个脚本
习惯了在Windows上用JetBrain 的 PyCharm 社区版,而社区版没有远程编程的功能,所以用这个脚本实现远程编程。
把脚本的换行符替换掉,是因为\r\n在unix下会让Python脚本拥有执行权限时报错。
具体脚本
需要安装paramiko包
首先将文件的\r\n转换成\n放入临时文件,然后上传该临时文件到服务器,再删除临时文件
接口参数:
函数名:keep_update
参数名 | 含义 | 类型 |
ip | 主机ip地址 | 字符串 |
name | 用户名 | 字符串 |
password | 密码 | 字符串 |
f2t |
本机文件路径为键、目标主机路径为值的字典, 用于确定要更新的文件 |
字典 |
import paramiko import os, time from tempfile import NamedTemporaryFile def update(addr, usr, pasw, fn, target_path): # 首先把回车符改掉,放进一个临时文件 tmpf = NamedTemporaryFile(mode='wb', delete=False) tmpf.write(open(fn, 'rb').read().replace(b'\r\n', b'\n')) name = tmpf.name tmpf.close() # 上传临时文件 trans = paramiko.Transport((addr, 22)) trans.connect(username=usr, password=pasw) sftp = paramiko.SFTPClient.from_transport(trans) sftp.put(name, target_path) # 删除临时文件 os.remove(name) def keep_update(addr, usr, pasw, fn2target_paths, if_stop=None, call_back=None): last_modified_times = {i: None for i in fn2target_paths} while True: for i in fn2target_paths: modified_time = os.stat(i).st_mtime if (not last_modified_times[i]) or modified_time > last_modified_times[i]: last_modified_times[i] = modified_time update(addr, usr, pasw, i, fn2target_paths[i]) print(i+':', time.asctime()) if call_back: call_back() if if_stop and if_stop[0]: break time.sleep(0.2) if __name__ == '__main__': f2t = { 'fn1': 'target_fname', } keep_update(ip, name, password, f2t)