Seite 1 von 1

Einzeiler mit "python -c" ?

Verfasst: Mittwoch 5. September 2007, 16:22
von abgdf
Hallo,

wie schreibt man eigentlich Einzeiler in Python:

Code: Alles auswählen

python -c 'for i in range(10):print i'
funktioniert, aber

Code: Alles auswählen

python -c 'print "a";for i in range(10):print i'
nicht !

Wie macht man das denn dort mit den Einrückungen ?
Und wie macht man deutlich, daß man wieder aus der for-Schleife raus will ?

Viele Grüße

Verfasst: Mittwoch 5. September 2007, 16:42
von Leonidas
Die Frage ist eigentlich nicht wie sondern wieso. Es macht ja doch keinen Sinn.

Verfasst: Mittwoch 5. September 2007, 18:33
von lunar
Leonidas hat geschrieben:Die Frage ist eigentlich nicht wie sondern wieso. Es macht ja doch keinen Sinn.
Eigentlich doch... manche Dinge sind eben in Python einfacher und schneller als in sed, awk, etc. Bei Perl-Menschen sind solche Einzeiler recht beliebt.

Verfasst: Mittwoch 5. September 2007, 19:11
von BlackJack
Aber das geht doch nicht mit `-c`!? Das ist IMHO viel zu beschränkt um ordentlich damit arbeiten zu können.

Ich benutze manchmal IPython um solche Aufgaben zu erledigen.

Verfasst: Mittwoch 5. September 2007, 19:41
von lunar
BlackJack hat geschrieben:Aber das geht doch nicht mit `-c`!? Das ist IMHO viel zu beschränkt um ordentlich damit arbeiten zu können.
Eben, und das stört auch ein bisschen an -c. Das Perl-Äquivalent (Kommandozeilen-Option hab ich vergessen) ist einfacher und iirc auch mächtiger.
Ich benutze manchmal IPython um solche Aufgaben zu erledigen.
Ich auch. Eigentlich benutze ich sogar recht häufig ipython, und eher selten die bash für komplexere Shell-Aufgaben.

Verfasst: Mittwoch 5. September 2007, 20:29
von birkenfeld
Dafür gibt es ein kleines handliches Modul (ich glaube es hieß "pyline"), das man dann so aufrufen kann:

Code: Alles auswählen

python -mpyline "...code..."
Es bereitet den Code dann entsprechend nach und füttert ihn erst dann an den Interpreter.

Verfasst: Mittwoch 5. September 2007, 22:13
von abgdf
Ja, das ist hier:

http://aspn.activestate.com/ASPN/Cookbo ... ipe/437932

Danke !

Die Einzeiler sind offenbar in manchen Foren als schnelle Antwort auf "sed"-Fragen usw. sehr beliebt.
Da kann ich aber nicht so gut verlangen, "installier erstmal das Modul". Na, nehm ich halt Perl dafür.
Wegen der "-c"-Option hatte ich nur gedacht/gehofft, daß meine bevorzugte Sprache Vergleichbares hätte.
Aber ich sehe ein, daß das schwer mit den Grundregeln der klaren Syntax zu vereinbaren ist.

Jedenfalls vielen Dank und viele Grüße

Re: Einzeiler mit "python -c" ?

Verfasst: Donnerstag 6. September 2007, 17:36
von mitsuhiko
abgdf hat geschrieben:

Code: Alles auswählen

python -c 'print "a";for i in range(10):print i'
nicht !
Da musst du halt kreativ sein:

Code: Alles auswählen

python -c 'map(range(10), lambda x: __import__("sys").stdout.write("%d\n" % x))'

Re: Einzeiler mit "python -c" ?

Verfasst: Donnerstag 6. September 2007, 17:39
von lunar
blackbird hat geschrieben:
abgdf hat geschrieben:

Code: Alles auswählen

python -c 'print "a";for i in range(10):print i'
nicht !
Da musst du halt kreativ sein:

Code: Alles auswählen

python -c 'map(range(10), lambda x: __import__("sys").stdout.write("%d\n" % x))'
Boing... das meinst du hoffentlich nicht ernst. Glücklicherweise gibts ipython, so dass man auf obfuscated python verzichten kann.

Re: Einzeiler mit "python -c" ?

Verfasst: Donnerstag 6. September 2007, 18:41
von birkenfeld
lunar hat geschrieben: Boing... das meinst du hoffentlich nicht ernst.
Nein, das meinte er nicht. Eigentlich wollte er die Argumente von map() umdrehen :)