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

Mittwoch 5. September 2007, 16:22

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
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Mittwoch 5. September 2007, 16:42

Die Frage ist eigentlich nicht wie sondern wieso. Es macht ja doch keinen Sinn.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
lunar

Mittwoch 5. September 2007, 18:33

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

Mittwoch 5. September 2007, 19:11

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

Mittwoch 5. September 2007, 19:41

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

Mittwoch 5. September 2007, 20:29

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

Mittwoch 5. September 2007, 22:13

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:

Donnerstag 6. September 2007, 17:36

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

Donnerstag 6. September 2007, 17:39

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

Donnerstag 6. September 2007, 18:41

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