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.

¿Fue útil?

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

vea respuesta de Cobbal

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top