Frage

Wie kann ich den folgenden Einzeiler Druck jede Datei durch Python machen?

python -c "import sys;print '>>',sys.argv[1:]" | dir *.*

Insbesondere möchte wissen, wie man Rohr in einen Python -c. DOS oder Cygwin Antworten akzeptiert.

War es hilfreich?

Lösung

Sie können die Lesedaten verrohrt in ein Python-Skript von sys.stdin lesen. Zum Beispiel:

ls -al | python -c "import sys; print sys.stdin.readlines()"

Es ist nicht ganz klar, was Sie tun wollen (vielleicht bin ich dumm). Die Verwirrung kommt aus Ihrem Beispiel, die Daten aus einem Python-Skript kochend.

Andere Tipps

python -c "import os; print os.listdir('.')"

Wenn Sie einige Formatierung anwenden, wie Sie in Ihrer Frage haben,

python -c "import os; print '\n'.join(['>>%s' % x for x in os.listdir('.')])"

Wenn Sie ein Rohr verwenden möchten, verwenden Sie xargs:

ls | xargs python -c "import sys; print '>>', sys.argv[1:]"

oder Backticks:

python -c "import sys; print '>>', sys.argv[1:]" `ls`

Wenn Sie drucken möchten alle Dateien:

find . -type f

Wenn Sie nur das aktuelle Verzeichnis der Dateien drucken

find . -type f -maxdepth 1

Wenn Sie möchten, sind die „>>“ vor jeder Zeile

find . -type f -maxdepth 1 | xargs -L 1 echo ">>"

Wenn Sie nicht wollen, um den Raum zwischen ">>" und $ path von echo

find . -type f -maxdepth 1 | xargs -L 1 printf ">>%s\n"

Das ist alles mit Cygwin, natürlich.

ls | python -c "import sys; print sys.stdin.read()"

nur stdin als normal für Rohre lesen

  

würde gerne wissen, wie man Rohr obwohl

Sie hatten das Rohr falsch herum, wenn Sie die Ausgabe von ‚dir‘ in Python, ‚dir‘ auf der linken Seite sein müßten füttern wollen. zB:.

dir "*.*" | python -c "import sys;[sys.stdout.write('>>%s\n' % line) for line in sys.stdin]"

(Der Hack mit der Liste Verständnis ist, weil es nicht erlaubt ist ein Block-Einführung ‚für‘ Anweisung in einer Zeile nach einem Semikolon.)

Klar, dass die Python-native Lösung ( ‚os.listdir‘) in der Praxis viel besser ist.

  

Insbesondere möchte wissen, wie man Rohr in eine Python -c

siehe

cobbal Antwort

Rohrleitungen durch ein Programm sind transparent vom Standpunkt des Programms betrachtet, all das Programm weiß, ist, dass es immer eine Eingabe von dem Standardeingabe-Stream

Im Allgemeinen ist ein Shell-Befehl der Form

A | B

leitet die Ausgabe des A der Eingang B sein

Wenn also ein „asdf“ auf die Standardausgabe Spieße, dann bekommt B „asdf“ in seine Standardeingabe

der Standardeingabe-Stream in Python ist sys.stdin

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top