Question

Comment puis-je faire en sorte que la doublure suivante imprime chaque fichier en Python?

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

Voudrais en particulier savoir comment canaliser un python -c. Réponses DOS ou Cygwin acceptées.

Était-ce utile?

La solution

Vous pouvez lire les données transférées dans dans un script Python en lisant sys.stdin. Par exemple:

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

Ce que vous voulez faire n’est pas tout à fait clair (peut-être que je suis stupide). La confusion provient de votre exemple, qui consiste à extraire des données d’un script python.

Autres conseils

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

Si vous souhaitez appliquer un formatage similaire à celui de votre question,

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

Si vous souhaitez utiliser un canal, utilisez xargs :

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

ou backticks:

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

Si vous souhaitez imprimer tous les fichiers:

find . -type f

Si vous souhaitez imprimer uniquement les fichiers du répertoire en cours

find . -type f -maxdepth 1

Si vous souhaitez inclure le " > > " avant chaque ligne

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

Si vous ne souhaitez pas laisser d'espace entre " > > " et $ path d'echo

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

Tout cela, c’est bien sûr avec cygwin.

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

il suffit de lire stdin comme d'habitude pour les pipes

  

aimerait savoir comment diriger un tuyau

Vous avez mal interprété le tuyau. Si vous souhaitez transférer le résultat de ‘dir’ dans Python, ‘dir’ doit être situé à gauche. par exemple:

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

(Le piratage avec la compréhension de la liste est dû au fait que vous n'êtes pas autorisé à introduire une instruction "for" pour introduire un bloc sur une ligne après un point-virgule.)

Il est clair que la solution native pour Python ("os.listdir") est bien meilleure dans la pratique.

  

Voudrais en particulier savoir comment canaliser un python -c

voir la réponse de Cobob

la canalisation à travers un programme est transparente du point de vue du programme, tout ce que le programme sait, c'est qu'il reçoit des entrées du flux d'entrée standard

En règle générale, une commande shell de la forme

A | B

redirige la sortie de A vers l'entrée de B

donc si A crache " asdf " sur la sortie standard, B obtient alors "asdf". dans son entrée standard

le flux d'entrée standard en python est sys.stdin

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top