piping into a python script
paddy3118 at googlemail.com
Thu Jan 24 16:46:24 CET 2008
On Jan 24, 3:25 pm, Marc 'BlackJack' Rintsch <bj_... at gmx.net> wrote:
> On Thu, 24 Jan 2008 17:17:25 +0200, Donn Ingle wrote:
> > Given these two examples:
> > 1.
> > ./fui.py *.py
> > 2.
> > ls *.py | ./fui.py
> > How can I capture a list of the arguments?
> > I need to get all the strings (file or dir names) passed via the normal
> > command line and any that may come from a pipe.
> > There is a third case:
> > 3.
> > ls *.jpg | ./fui.py *.png
> > Where I would be gathering strings from two places.
> > I am trying to write a command-line friendly tool that can be used in
> > traditional gnu/linux ways, otherwise I'd skip the pipe stuff totally.
> > I have tried:
> > 1. pipedIn = sys.stdin.readlines()
> > Works fine for example 2, but example 1 goes into a 'wait for input' mode
> > and that's no good. Is there a way to tell when no input is coming from a
> > pipe at all?
> Usually Linux tools that can get the data from command line or files treat
> a single - as file name special with the meaning of: read from stdin.
> So the interface if `fui.py` would be:
> 1. ./fui.py *.a
> 2. ls *.a | ./fui.py -
> 3. ls *.a | ./fui.py *.b -
> Marc 'BlackJack' Rintsch
If X.a X.b Y.a Y.b are all files whose contents are to be processed
To process all files:
./fui.py *.a *.b
./fui.py `ls *.a *.b`
To process one file from a pipe unix usually does:
cat X.a | ./fui.py -
To get the filenames from stdin would usually need a command line
switch telling fui.py to read a file *list* from stdin. For verilog
simulators for example you have the -f switch that says insert further
command line arguments from the file name in the next argument, so you
ls *.a | ./fui.py -f - *.b
For equivalent functionality to my first example.
More information about the Python-list