2017年2月
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28        

Amazonウィジェット

  • miniPC
  • 最近買った本
  • Raspberry Pi
  • クアッドコプター
  • 書籍ランキング

AdSense

  • 広告
無料ブログはココログ

« C言語 関数ポインタを使って遊ぶ | トップページ | C# 図形の塗りつぶし色の変え方 »

2016年10月30日 (日)

Python lsコマンドからファイルのリストを受け取るやりかた

ファイルのリストを受け取ってpythonで処理しようとするときに、lsでファイルのリストを一旦ファイルに作ってから、それを読ます方法がありますが、ちょっと面倒なので直接やる方法を考えていました。

subprocessというのを使うと、外部のコマンドやプログラムを走らせることができる。

しかしlsからの結果を受け取ろうとして、
a = subprocess.call("ls -l")
とやってしまうと何も受け取れない。

これをやるくらいならpythonで用意されている、
import glob
files = glob.glob("*.JPG")

を使ったほうが速いし覚えやすい。
globのimportのやり方を間違うと少し嵌りそう。

次はパイプを使ってやる方法。


from subprocess import *

output = Popen( ["ls","-l"],stdout=PIPE)

while True:
    line = output.stdout.readline()
    if not line:
        break
    print line,

ちなみに、"ls -1"とすれば、ファイル名のリストが一行ずつで出力される。

インタラクティブシェルでいろいろ試せば見えてくる。

from subprocess import *
でとりあえずインポートしたら、

output = Popen(["ls","-l"],stdout=PIPE)
をつかって出力を受け取る。
ただし、ここまでだとstdoutとstderrが混ざったオブジェクトの状態なので、
stdoutだけを取り出すようにする。

output.stdout.read()
を使えば、すべての中身を読みだせる。
これを何かで受け取って、

a = output.stdout.read()
としたあと、
lines = a.split('\n')
とすれば、
簡単に行ごとの中身が手に入る。

ほかにも、aからそのままの状態で、
a.count(".py")
とすれば、この単語が何個あるか数えられたり、

len(lines)
とすれば何行出力されたかわかる。ただしls -lの一行目は、ファイル名ではない。




« C言語 関数ポインタを使って遊ぶ | トップページ | C# 図形の塗りつぶし色の変え方 »

Python」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/518723/64314874

この記事へのトラックバック一覧です: Python lsコマンドからファイルのリストを受け取るやりかた:

« C言語 関数ポインタを使って遊ぶ | トップページ | C# 図形の塗りつぶし色の変え方 »