Python one-liner для печати каждого файла в текущем каталоге

StackOverflow https://stackoverflow.com/questions/613007

  •  03-07-2019
  •  | 
  •  

Вопрос

Как я могу заставить следующий лайнер печатать каждый файл через Python?

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

В частности, хотелось бы знать, как передать в python -c. Ответы DOS или Cygwin приняты.

Это было полезно?

Решение

Вы можете прочитать данные, отправленные в скрипт Python, прочитав sys.stdin. Например:

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

Не совсем понятно, что вы хотите сделать (возможно, я глуп). Путаница исходит из вашего примера, который передает данные из скрипта Python.

Другие советы

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

Если вы хотите применить какое-либо форматирование, как у вас в вопросе,

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

Если вы хотите использовать канал, используйте xargs :

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

или кавычки:

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

Если вы хотите распечатать все файлы:

find . -type f

Если вы хотите распечатать только файлы текущего каталога

find . -type f -maxdepth 1

Если вы хотите включить " > > " перед каждой строкой

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

Если вы не хотите использовать пробел между " > > " и $ path from echo

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

Все это, конечно, использует cygwin.

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

просто прочитайте stdin как обычно для каналов

  

Хотелось бы узнать, как пайпить, хотя

Вы неправильно указали канал, если хотите передать вывод & # 8216; dir & # 8217; в Python, & # 8216; dir & # 8217; должно быть слева. например:.

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

(Хак с пониманием списка состоит в том, что вы не можете использовать оператор, представляющий блок & # 8216; for & # 8217; в одну строку после точки с запятой.)

Очевидно, что нативное решение Python (& # 8216; os.listdir & # 8217;) намного лучше на практике.

  

В частности, хотел бы знать, как передать в питон -c

см. ответ Коббала

передача через программу прозрачна с точки зрения программы, все, что знает программа, это то, что она получает данные из стандартного потока ввода

Вообще говоря, команда оболочки в форме

A | B

перенаправляет вывод A на вход B

так что если А плюет " asdf " к стандартному выводу, тогда B получает " asdf " в его стандартный ввод

стандартный поток ввода в Python - это sys.stdin

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top