标签:
抓取文件
import shutil, tempfile, subprocess def _fetch_file(host, user, filename): """Function to fetch a file from the server and copy it to the local machine. A temporary file name is created for 从远程服务器或者本地本地拷贝文件到临时文件中 """ handle, tmpfile = tempfile.mkstemp(text=True) os.close(handle) if host != "localhost": source = user + "@" + host + ":" + filename #scp -qB 批处理模式,不输入密码,所以需要无密码能够登陆。 subprocess.check_call(["scp", "-qB", source, tmpfile]) else: #本机直接拷贝 shutil.copyfile(filename, tmpfile) return tmpfile
替换文件
def _replace_file(host, user, filename, source): if host != "localhost": target = user + "@" + host + ":" + filename subprocess.check_call(["scp", "-qB", source, target]) else: shutil.copyfile(source, filename)
清理ConfigParser不能处理的值
def _clean_config_file(self, fname): infile = file(fname, ‘r‘) lines = infile.readlines() infile.close() output = file(fname, ‘w‘) for line in lines: if re.match("#.*|\[\w+\]|[\w\d_-]+\s*=\s*.*", line): pass elif re.match("\s*[\w\d_-]+\s*", line): line = "%s = %s\n" % (line.rstrip("\n"), _NONE_MARKER) else: line = "#!#" + line output.write(line) output.close()
恢复清理后的文件
def _unclean_config_file(self, filename): infile = file(filename, ‘r‘) lines = infile.readlines() infile.close() output = file(filename, ‘w‘) for line in lines: mobj = re.match("([\w\d_-]+)\s*=\s*(.*)", line) if mobj and mobj.group(2) == _NONE_MARKER: output.write(mobj.group(1) + "\n") continue if re.match("#!#.*", line): output.write(line[3:]) continue output.write(line) output.close()
读取配置文件
def read(self, path): """Read configuration from a file.""" # We use ConfigParser, but since it cannot read # configuration files we options without values, we have # to clean the output once it is fetched before calling # ConfigParser handle, tmpfile = tempfile.mkstemp(text=True) os.close(handle) shutil.copy(path, tmpfile) self._clean_config_file(tmpfile) self.__config = ConfigParser.SafeConfigParser() self.__config.read(tmpfile)
写配置文件
def write(self, path): """Write the configuration to a file.""" output = open(path, ‘w‘) self.__config.write(output) # Since ConfigParser cannot handle options without values # (yet), we have to unclean the file before replacing it. output.close() self._unclean_config_file(path)
标签:
原文地址:http://www.cnblogs.com/huanhuanang/p/4942995.html