1

次のワンライナーでPythonを介してすべてのファイルを印刷するにはどうすればよいですか?

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

具体的には、python-cにパイプする方法を知りたいです。DOSまたはCygwinの応答が受け入れられました。

4

6 に答える 6

6
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`
于 2009-03-04T23:47:33.473 に答える
5

sys.stdinを読み取ることにより、Pythonスクリプトにパイプされたデータを読み取ることができます。例えば:

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

あなたが何をしたいのかは完全には明確ではありません(多分私は愚かです)。混乱は、Pythonスクリプトからデータをパイプする例から来ています。

于 2009-03-05T00:06:43.847 に答える
4

すべてのファイルを印刷する場合:

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を使用しています。

于 2009-03-05T00:15:53.997 に答える
3
ls | python -c "import sys; print sys.stdin.read()"

パイプの標準入力を通常どおり読み取るだけです

于 2009-03-05T00:29:16.477 に答える
2

パイプの仕方を知りたいのですが

'dir' の出力を Python に送りたい場合は、'dir' を左側に配置する必要があります。例えば。:

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

(リスト内包表記のハックは、セミコロンの後の 1 行でブロックを導入する 'for' ステートメントが許可されていないためです。)

明らかに、Python ネイティブ ソリューション ('os.listdir') は実際にははるかに優れています。

于 2009-03-05T00:44:18.780 に答える
1

特に python -c にパイプする方法を知りたい

コバルの答えを見る

プログラムのパイピングは、プログラムの観点からは透過的です。プログラムが知っているのは、標準入力ストリームから入力を取得していることだけです。

一般的に言えば、次の形式のシェル コマンド

A | B

A の出力を B の入力にリダイレクトします

したがって、A が "asdf" を標準出力に出力すると、B は "asdf" を標準入力に取得します。

Pythonの標準入力ストリームはsys.stdin

于 2009-03-05T09:12:06.987 に答える