27 """Implementation of the UUencode and UUdecode functions.
29 encode(in_file, out_file [,name, mode])
30 decode(in_file [, out_file, mode])
36 from types
import StringType
38 __all__ = [
"Error",
"encode",
"decode"]
43 def encode(in_file, out_file, name=None, mode=None):
50 elif isinstance(in_file, StringType):
52 name = os.path.basename(in_file)
55 mode = os.stat(in_file)[0]
56 except AttributeError:
58 in_file =
open(in_file,
'rb')
64 elif isinstance(out_file, StringType):
65 out_file =
open(out_file,
'w')
76 out_file.write(
'begin %o %s\n' % ((mode&0777),name))
77 str = in_file.read(45)
79 out_file.write(binascii.b2a_uu(str))
80 str = in_file.read(45)
81 out_file.write(
' \nend\n')
84 def decode(in_file, out_file=None, mode=None, quiet=0):
85 """Decode uuencoded file"""
91 elif isinstance(in_file, StringType):
92 in_file =
open(in_file)
97 hdr = in_file.readline()
99 raise Error,
'No valid begin line found in input file'
100 if hdr[:5] !=
'begin':
102 hdrfields = hdr.split(
" ", 2)
103 if len(hdrfields) == 3
and hdrfields[0] ==
'begin':
110 out_file = hdrfields[2].
rstrip()
111 if os.path.exists(out_file):
112 raise Error,
'Cannot overwrite existing file: %s' % out_file
114 mode = int(hdrfields[1], 8)
119 out_file = sys.stdout
120 elif isinstance(out_file, StringType):
121 fp =
open(out_file,
'wb')
123 os.path.chmod(out_file, mode)
124 except AttributeError:
130 s = in_file.readline()
131 while s
and s.strip() !=
'end':
133 data = binascii.a2b_uu(s)
134 except binascii.Error, v:
136 nbytes = (((ord(s[0])-32) & 63) * 4 + 5) / 3
137 data = binascii.a2b_uu(s[:nbytes])
139 sys.stderr.write(
"Warning: %s\n" %
str(v))
141 s = in_file.readline()
143 raise Error,
'Truncated input file'
146 """uuencode/uudecode main program"""
158 if not ok
or len(args) > 2:
159 print 'Usage:', sys.argv[0],
'[-d] [-t] [input [output]]'
160 print ' -d: Decode (in stead of encode)'
161 print ' -t: data is text, encoded format unix-compatible text'
165 if o ==
'-d': dopt = 1
166 if o ==
'-t': topt = 1
175 if isinstance(output, StringType):
176 output =
open(output,
'w')
178 print sys.argv[0],
': cannot do -t to stdout'
183 if isinstance(input, StringType):
184 input =
open(input,
'r')
186 print sys.argv[0],
': cannot do -t from stdin'
190 if __name__ ==
'__main__':