Python Einzeiler jede Datei im aktuellen Verzeichnis drucken
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.
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.
sieheInsbesondere möchte wissen, wie man Rohr in eine Python -c
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