Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.python > #12794
| From | Terry Reedy <tjreedy@udel.edu> |
|---|---|
| Subject | Re: One line command line filter |
| Date | 2011-09-05 18:21 -0400 |
| References | <4725b2c3-d930-4fb0-9fe7-a286d150f9c5@d18g2000yqm.googlegroups.com> |
| Newsgroups | comp.lang.python |
| Message-ID | <mailman.782.1315261387.27778.python-list@python.org> (permalink) |
On 9/5/2011 4:38 PM, Jon Redgrave wrote: > It seems unreasonably hard to write simple one-line unix command line > filters in python: > > eg: ls | python -c "<something> print x.upper()" > > to get at sys.stdin or similar needs an import, which makes a > subsequent for-loop illegal. > python -c "import sys; for x in sys.stdin(): print x"<<- SyntaxError > > Am I missing something obvious? The doc says "-c <command> Execute the Python code in command. command can be one or more statements separated by newlines," However, I have no idea how to put newlines into a command-line string. Changing '; ' to '\n' does not work, at least not in Windows. The '\n' is passed on to Python as 2 chars, and the '\' is seen as the line-continuation char and the 'n' as illegal following it. Will a *nix shell 'cook' the string and convert '\n' to a literal newline before passing it to Python? For *nix, I would expect the <<EOF mechanism to work. Have you tried that? That said, Python is designed for named multiple-statement programs, just as it is designed for named multiple-statement functions. Or it is designed for interactive work. The following works: dir | python -c "while True: print(input())" except that it finishes with an error traceback: Traceback (most recent call last): File "<string>", line 1, in <module> EOFError: EOF when reading a line Perhaps tolerable if Python is at the end of the pipe, not otherwise. > Is there a better solution - if not is this worth a PEP? PEPs have to propose a concrete solution, preferably with some previous discussion. I take is that your proposal would be to add another builtin means to access stdin. -- Terry Jan Reedy
Back to comp.lang.python | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
One line command line filter Jon Redgrave <jredgrave@capisco.com> - 2011-09-05 13:38 -0700
Re: One line command line filter Thomas Jollans <t@jollybox.de> - 2011-09-05 22:47 +0200
Re: One line command line filter Jon Redgrave <jredgrave@capisco.com> - 2011-09-05 14:32 -0700
Re: One line command line filter Terry Reedy <tjreedy@udel.edu> - 2011-09-05 19:02 -0400
Re: One line command line filter Terry Reedy <tjreedy@udel.edu> - 2011-09-05 18:21 -0400
Re: One line command line filter Steven D'Aprano <steve+comp.lang.python@pearwood.info> - 2011-09-06 09:18 +1000
Re: One line command line filter Terry Reedy <tjreedy@udel.edu> - 2011-09-05 21:25 -0400
Re: One line command line filter Hans Mulder <hansmu@xs4all.nl> - 2011-09-06 13:15 +0200
Re: One line command line filter Steven D'Aprano <steve+comp.lang.python@pearwood.info> - 2011-09-06 09:29 +1000
Re: One line command line filter John Wiegley <jwiegley@gmail.com> - 2011-09-06 01:51 -0500
Re: One line command line filter Peter Otten <__peter__@web.de> - 2011-09-06 09:53 +0200
csiph-web