現在のディレクトリ内のすべてのファイルを印刷するPythonワンライナー

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

  •  03-07-2019
  •  | 
  •  

質問

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

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

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

役に立ちましたか?

解決

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

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

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’)は実際にははるかに優れています。

  

具体的には、python -cにパイプする方法を知りたいです

cobbalの回答

を参照

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

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

A | B

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

Aが" asdf"を吐き出す場合標準出力にすると、Bは「asdf」を取得します。標準入力に

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top