Python one-liner para imprimir todos os arquivos no diretório atual
Pergunta
Como posso fazer a um forro seguinte imprimir todos os arquivos através de Python?
python -c "import sys;print '>>',sys.argv[1:]" | dir *.*
Especificamente gostaria de saber como tubo em uma -c python. DOS ou Cygwin respostas aceitou.
Solução
Você pode ler dados canalizada em um script Python, lendo sys.stdin. Por exemplo:
ls -al | python -c "import sys; print sys.stdin.readlines()"
Não é inteiramente claro o que você quer fazer (talvez eu sou estúpido). A confusão vem do seu exemplo que é tubulação de dados a partir de um script python.
Outras dicas
python -c "import os; print os.listdir('.')"
Se você quiser aplicar alguma formatação como você tem na sua pergunta,
python -c "import os; print '\n'.join(['>>%s' % x for x in os.listdir('.')])"
Se você quiser usar um tubo, uso xargs
:
ls | xargs python -c "import sys; print '>>', sys.argv[1:]"
ou backticks:
python -c "import sys; print '>>', sys.argv[1:]" `ls`
Se você quiser imprimir todas arquivos:
find . -type f
Se você quiser imprimir somente os arquivos do diretório atual
find . -type f -maxdepth 1
Se você quiser incluir o ">>" antes de cada linha
find . -type f -maxdepth 1 | xargs -L 1 echo ">>"
Se você não quer que o espaço entre ">>" e $ caminho de eco
find . -type f -maxdepth 1 | xargs -L 1 printf ">>%s\n"
Isso é tudo usando cygwin, é claro.
ls | python -c "import sys; print sys.stdin.read()"
apenas ler stdin como normal para tubos
gostaria de saber como tubo embora
Você tinha o tubo da maneira errada rodada, se você queria para alimentar a saída do ‘dir’ em Python, ‘dir’ teria de ser à esquerda. por exemplo:.
dir "*.*" | python -c "import sys;[sys.stdout.write('>>%s\n' % line) for line in sys.stdin]"
(O truque com a compreensão da lista é porque você não está permitido a ‘para’ declaração em uma linha após um ponto e vírgula.-Introdução do bloco)
É evidente que a solução Python nativa ( ‘os.listdir’) é muito melhor na prática.
Especificamente gostaria de saber como tubo em um python -c
tubulação através de um programa é transparente do ponto de vista do programa, todo o programa sabe é que é começar a entrada do fluxo de entrada padrão
De um modo geral, um comando da forma
A | B
redirecciona a saída de à ser a entrada do B
Assim, se uma espetos "asdf" para a saída padrão, então B recebe "asdf" em sua entrada padrão
o fluxo de entrada padrão no pitão é sys.stdin