import sys import platform import subprocess def MakeByte2str(arg): '''Convert output from subprocess pipes (bytes) to str (unicode) in Python 3. In Python 2: Leaves output alone (already str). Leaves stuff of other types alone (including unicode in Py2) Works recursively for string-like stuff in nested loops and tuples. typical use:: out = MakeByte2str(out) or:: out,err = MakeByte2str(s.communicate()) ''' if isinstance(arg,str): return arg if isinstance(arg,bytes): return arg.decode() if isinstance(arg,list): return [MakeByte2str(i) for i in arg] if isinstance(arg,tuple): return tuple([MakeByte2str(i) for i in arg]) return arg svn = 'svn' # assume in path cmd = [svn,'info','https://subversion.xray.aps.anl.gov/pyGSAS/trunk'] s = subprocess.Popen(cmd, stdout=subprocess.PIPE,stderr=subprocess.PIPE) out,err = MakeByte2str(s.communicate()) if err: print ('subversion error!\nout=%s'%out) print ('err=%s'%err) sys.exit(1) for line in out.split('\n'): if line.startswith('Rev'): version = line.split()[1].strip() break else: print ('Version not found!\nout=%s'%out) sys.exit(1) for fil in 'g2complete/meta.yaml','g2full/construct.yaml': fp = open(fil+'.template','r') out = fp.read().replace('**Version**',version) if sys.platform == "win32" and platform.architecture()[0] != '64bit': print('changing for 32-bit windows') out = out.replace('win-64','win-32') fp.close() print('Creating',fil) fp = open(fil,'w') fp.write(out) fp.close()