2009-03-04 6 views
1

Comment faire pour que le liner suivant imprime tous les fichiers via Python? Spécifiquement, aimerait savoir comment canaliser dans un python -c. Les réponses DOS ou Cygwin sont acceptées.Python one-liner pour imprimer tous les fichiers du répertoire en cours

+1

On dirait qu'il y aurait une meilleure façon de le faire que d'utiliser Python ... –

+0

ce n'est pas vraiment sur le paquebot !!! à moins de suivre une définition très laaaaax d'une ligne de code, où les lignes vides sont comptées aussi! – hasen

+0

qu'est-ce que vous essayez de faire exactement ?? dir *. * les liste déjà tous, alors à quoi ça sert? – hasen

Répondre

4

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

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

Il n'est pas tout à fait clair ce que vous voulez faire (peut-être que je suis stupide). La confusion vient de votre exemple qui transporte les données d'un script python.

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

Si vous souhaitez appliquer une mise en forme comme vous avez dans votre question,

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

Si vous souhaitez utiliser un tuyau, utilisez xargs:

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

ou contre-apostrophes:

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

Merci, aimerait savoir comment canaliser. – Luis

4

Si vous souhaitez imprimer tous fichiers:

find . -type f 

Si vous souhaitez imprimer uniquement les fichiers de 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 voulez pas l'espace entre "> > "et $ path from echo

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

Tout ceci est bien sûr en utilisant cygwin.

+0

+1 - python est sympa (je suis un fan), mais parfois il y a des outils juste pour faire le boulot :-) –

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

juste de lire stdin comme normal pour les tuyaux

+0

vrai, mais alors à quoi ça sert? – hasen

+0

aucun point intrinsèquement, mais c'est un point de départ pour des commandes un peu plus complexes et éventuellement utiles. – cobbal

2

aimerait savoir comment tuyau si

Vous avez eu le tuyau dans le mauvais sens, si vous voulez nourrir la sortie de 'dir' en Python, 'dir' devrait être sur la gauche. par exemple .:

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

(Le hack avec la compréhension de la liste est parce que vous n'êtes pas autorisé un bloc-introduction « pour » déclaration sur une ligne après un point-virgule.)

Il est clair que la solution Python natif ('os.listdir') est beaucoup mieux en pratique.

1

Plus précisément voudrais savoir comment pipe dans un python -c

voir cobbal's answer

tuyauterie à travers un programme est transparent du point de vue du programme, tout le programme sait est que il reçoit l'entrée du flux d'entrée standard

En général, une commande shell de la forme

A | B 

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

Ainsi, si un crache « asdf » sortie standard, puis B devient « asdf » dans son entrée standard

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

+0

Une chose me dérange un peu. Pourquoi voulez-vous utiliser 'python -c'? – hasen

+0

pour éviter d'écrire un fichier py en l'enregistrant puis en l'exécutant par la ligne cmd. – Luis

Questions connexes