Python one-liner para imprimir todos los archivos en el directorio actual
Pregunta
¿Cómo puedo hacer que el siguiente forro imprima todos los archivos a través de Python?
python -c "import sys;print '>>',sys.argv[1:]" | dir *.*
Específicamente, le gustaría saber cómo canalizar a python -c. Se aceptan respuestas a DOS o Cygwin.
Solución
Puede leer los datos canalizados en un script de Python leyendo sys.stdin. Por ejemplo:
ls -al | python -c "import sys; print sys.stdin.readlines()"
No está del todo claro qué es lo que quieres hacer (tal vez sea estúpido). La confusión proviene de su ejemplo, que consiste en extraer datos de un script de Python.
Otros consejos
python -c "import os; print os.listdir('.')"
Si desea aplicar algún formato como el que tiene en su pregunta,
python -c "import os; print '\n'.join(['>>%s' % x for x in os.listdir('.')])"
Si desea utilizar una canalización, use xargs
:
ls | xargs python -c "import sys; print '>>', sys.argv[1:]"
o backticks:
python -c "import sys; print '>>', sys.argv[1:]" `ls`
Si desea imprimir todos los archivos :
find . -type f
Si desea imprimir solo los archivos del directorio actual
find . -type f -maxdepth 1
Si desea incluir el " > > " antes de cada linea
find . -type f -maxdepth 1 | xargs -L 1 echo ">>"
Si no quieres el espacio entre " > > " y $ ruta desde echo
find . -type f -maxdepth 1 | xargs -L 1 printf ">>%s\n"
Todo esto es usar cygwin, por supuesto.
ls | python -c "import sys; print sys.stdin.read()"
acaba de leer la entrada estándar como es normal en las tuberías
le gustaría saber cómo canalizar
Tuviste la tubería al revés, si quisieras alimentar la salida de & # 8216; dir & # 8217; en Python, & # 8216; dir & # 8217; Tendría que estar a la izquierda. ej .:
dir "*.*" | python -c "import sys;[sys.stdout.write('>>%s\n' % line) for line in sys.stdin]"
(El truco con la comprensión de la lista se debe a que no se le permite una declaración & # 8216; para & # 8217; introducción de bloque en una línea después de un punto y coma).
Claramente, la solución nativa de Python (& # 8216; os.listdir & # 8217;) es mucho mejor en la práctica.
Específicamente, le gustaría saber cómo canalizar un python -c
la canalización a través de un programa es transparente desde el punto de vista del programa, todo lo que el programa sabe es que está recibiendo información del flujo de entrada estándar
En términos generales, un comando de shell del formulario
A | B
redirige la salida de A para que sea la entrada de B
entonces si A escupe " asdf " a la salida estándar, entonces B obtiene " asdf " en su entrada estándar
el flujo de entrada estándar en python es sys.stdin