WIP
[evolve-layout.git] / pyline
blobf0841d6fa9ff74ecaa70217e1a70436f953c25f4
1 #!/usr/bin/env python
2 # encoding: utf-8
4 # updated 2005.07.21, thanks to Jacob Oscarson
5 # updated 2006.03.30, thanks to Mark Eichin
6 # → http://code.activestate.com/recipes/437932-pyline-a-grep-like-sed-like-command-line-tool/
8 import sys
9 import re
10 import getopt
12 # parse options for module imports
13 opts, args = getopt.getopt(sys.argv[1:], 'm:')
14 opts = dict(opts)
15 if '-m' in opts:
16 for imp in opts['-m'].split(','):
17 locals()[imp] = __import__(imp.strip())
19 cmd = ' '.join(args)
20 if not cmd.strip():
21 cmd = 'line' # no-op
23 codeobj = compile(cmd, 'command', 'eval')
24 write = sys.stdout.write
26 for numz, line in enumerate(sys.stdin):
27 line = line[:-1]
28 num = numz + 1
29 words = [w for w in line.strip().split(' ') if len(w)]
30 result = eval(codeobj, globals(), locals())
31 if result is None or result is False:
32 continue
33 elif isinstance(result, list) or isinstance(result, tuple):
34 result = ' '.join(map(str, result))
35 else:
36 result = str(result)
37 write(result)
38 if not result.endswith('\n'):
39 write('\n')