[Tutor] Unix philosophy
Guillermo Fernandez Castellanos
guillermo.fernandez at epfl.ch
Tue Nov 18 06:23:49 EST 2003
Thanks for the answers.
I'm reading the digest version of the mailing list, that's why I grouped
> There are probably other ways to do this using exec or
> something, but I'd probably make all of the programs
> as libraries and make one short script connecting them
> all together. You know how do do that, don't you?
Actually it was my philosophy until now. I am developing a utility and I'm separating it into libraries (one to parse text, another to join files, another to make database queries) but I always try to also allow the libraries to be used as single programs (with the if __name__=='__main__':). But I though it would be neat to do it the 'pipeline' way :-) It would allow the user to reproduce my program using a single command line and that way 'personalize' the execution (if he don't need a library for example).
> I use the fileinput module to do this:
> works great for all kinds of files, multiple files, stdin, etc.
Indeed it seems to answer what I was looking for :-)
> Basically, what you have to do is read input from stdin and write
> output to stdout. That makes it possible to use it as a filter in a
> pipeline like
> grep something < file | python myprog.py | lp
> or whatever. The "|" signs here connect the first program's stdout to
> the second program's stdin.
> This is a bit unfriendly so its common to write programs that
> take a command line argument which switches filter behavious
> on or off. There is no fixed convention for how this is done.
That means that if I wanted to do it in a more general way that with fileinput module I should use the sys.stdin/out functions?
Are you thinking to something like this:
# Simple cat UNIX command
for files in sys.argv[1:]:
More information about the Tutor