Einzeiler mit "python -c" ?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
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
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Die Frage ist eigentlich nicht wie sondern wieso. Es macht ja doch keinen Sinn.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
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.
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.
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.
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

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.
Dann lieber noch Vim 7 als Windows 7.

http://pythonic.pocoo.org/
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
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

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))'
TUFKAB – the user formerly known as blackbird
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.
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

lunar hat geschrieben: Boing... das meinst du hoffentlich nicht ernst.
Nein, das meinte er nicht. Eigentlich wollte er die Argumente von map() umdrehen :)
Dann lieber noch Vim 7 als Windows 7.

http://pythonic.pocoo.org/
Antworten