次のワンライナーでPythonを介してすべてのファイルを印刷するにはどうすればよいですか?
python -c "import sys;print '>>',sys.argv[1:]" | dir *.*
具体的には、python-cにパイプする方法を知りたいです。DOSまたはCygwinの応答が受け入れられました。
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`
sys.stdinを読み取ることにより、Pythonスクリプトにパイプされたデータを読み取ることができます。例えば:
ls -al | python -c "import sys; print sys.stdin.readlines()"
あなたが何をしたいのかは完全には明確ではありません(多分私は愚かです)。混乱は、Pythonスクリプトからデータをパイプする例から来ています。
すべてのファイルを印刷する場合:
find . -type f
現在のディレクトリのファイルだけを印刷したい場合
find . -type f -maxdepth 1
各行の前に「>>」を含めたい場合
find . -type f -maxdepth 1 | xargs -L 1 echo ">>"
">>" と echo の $path の間にスペースを入れたくない場合
find . -type f -maxdepth 1 | xargs -L 1 printf ">>%s\n"
もちろん、これはすべてcygwinを使用しています。
ls | python -c "import sys; print sys.stdin.read()"
パイプの標準入力を通常どおり読み取るだけです
パイプの仕方を知りたいのですが
'dir' の出力を Python に送りたい場合は、'dir' を左側に配置する必要があります。例えば。:
dir "*.*" | python -c "import sys;[sys.stdout.write('>>%s\n' % line) for line in sys.stdin]"
(リスト内包表記のハックは、セミコロンの後の 1 行でブロックを導入する 'for' ステートメントが許可されていないためです。)
明らかに、Python ネイティブ ソリューション ('os.listdir') は実際にははるかに優れています。