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.

Foi útil?

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

de cobbal resposta

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top