Marc 'BlackJack' Rintsch <[EMAIL PROTECTED]> 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 -
Did anyone mention the (standard library) fileinput module? (I missed the start of this thread.) http://docs.python.org/lib/module-fileinput.html 11.2 fileinput -- Iterate over lines from multiple input streams This module implements a helper class and functions to quickly write a loop over standard input or a list of files. The typical use is: import fileinput for line in fileinput.input(): process(line) This iterates over the lines of all files listed in sys.argv[1:], defaulting to sys.stdin if the list is empty. If a filename is '-', it is also replaced by sys.stdin. To specify an alternative list of filenames, pass it as the first argument to input(). A single file name is also allowed. -- Nick Craig-Wood <[EMAIL PROTECTED]> -- http://www.craig-wood.com/nick -- http://mail.python.org/mailman/listinfo/python-list