argparse limitations
Benoist Laurent
benoist at ibpc.fr
Tue Jul 31 05:39:36 EDT 2012
Well sorry about that but it seems I was wrong.
It was Friday evening and I guess I've not been careful.
Actually when you specify nargs="?", the doc says "One argument will be consumed from the command line if possible, and produced as a single item".
So you can't pass several arguments to the program.
So, to rephrase the question, how can I get a argument parser that parses the command-line just as Unix grep would do?
i.e.
$ echo 42 > foo.txt
$ echo 172 >> foo.txt
$ cp foo.txt bar.txt
$
$ grep 42 foo.txt
42
$ grep 42 foo.txt bar.txt
foo.txt:42
bar.txt:42
$ cat foo.txt | grep 42
42
$ grep -c 42 foo.txt
1
Cheers,
Ben
Le Jul 27, 2012 à 7:08 PM, Benoist Laurent a écrit :
>
>
> Yes basically looks like you get it.
> I have to further test it but my first impression is that it's correct.
>
> So actually the point was to use nargs="?".
>
> Thank you very much.
> Ben
>
>
>
> Le Jul 27, 2012 à 5:44 PM, Peter Otten a écrit :
>
>> Benoist Laurent wrote:
>>
>>> I'm impletting a tool in Python.
>>> I'd like this tool to behave like a standard unix tool, as grep for
>>> exemple. I chose to use the argparse module to parse the command line and
>>> I think I'm getting into several limitations of this module.
>>>
>>>> First Question.
>>> How can I configure the the ArgumentParser to allow the user to give
>>> either an input file or to pipe the output from another program?
>>>
>>> $ mytool.py file.txt
>>> $ cat file.txt | mytool.py
>>
>> $ echo alpha > in.txt
>> $ cat in.txt | ./mytool.py
>> ALPHA
>> $ cat in.txt | ./mytool.py - out.txt
>> $ cat out.txt
>> ALPHA
>> $ ./mytool.py in.txt
>> ALPHA
>> $ ./mytool.py in.txt out2.txt
>> $ cat out2.txt
>> ALPHA
>> $ cat ./mytool.py
>> #!/usr/bin/env python
>> assert __name__ == "__main__"
>>
>> import argparse
>> import sys
>>
>> parser = argparse.ArgumentParser()
>> parser.add_argument("infile", nargs="?", type=argparse.FileType("r"),
>> default=sys.stdin)
>> parser.add_argument("outfile", nargs="?", type=argparse.FileType("w"),
>> default=sys.stdout)
>> args = parser.parse_args()
>>
>> args.outfile.writelines(line.upper() for line in args.infile)
>>
>> Is that good enough?
>>
>>
>> --
>> http://mail.python.org/mailman/listinfo/python-list
>>
>
> --
> Benoist Laurent
> Laboratoire de Biochimie Theorique / CNRS UPR 9080
> Institut de Biologie Physico-Chimique
> 13, rue Pierre et Marie Curie
> F-75005 Paris
> Tel. +33 [0]1 58 41 51 67 or +33 [0]6 21 64 50 56
>
> --
> http://mail.python.org/mailman/listinfo/python-list
--
Benoist Laurent
Laboratoire de Biochimie Theorique / CNRS UPR 9080
Institut de Biologie Physico-Chimique
13, rue Pierre et Marie Curie
F-75005 Paris
Tel. +33 [0]1 58 41 51 67 or +33 [0]6 21 64 50 56
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-list/attachments/20120731/31fe03c5/attachment.html>
More information about the Python-list
mailing list