- ベストアンサー
pyhonでコマンドラインを入力したい。
今日はLinux上でのコマンドライン、例えば以下のようなもの $ head -n 20 test |grep '2011'|wc -l 5 を直接ターミナルに打ち込むのでなく、pythonに記入し、そのpythonファイルを叩くことで実行したいと思っております。 つまり、 head -n 20 test |grep '2011'|wc -l というのをtest.pyみたいなものに保存し、 $pyothon test.py と打ち込むと先ほどと同じ結果の「5」が返されるようにしたいです。 どのようにすればいいのでしょうか。よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
> <open file '<fdopen>', mode 'rb' at 0x2b1268d74780> エラーではありません。end_of_pipe(=wc.stdout)のオブジェクトの情報が表示されたものです。 http://www.python.jp/doc/release/library/subprocess.html > Popen.stdout > stdout 引数が PIPE の場合、この属性には子プロセスの出力に使われるファイルオブジェクトになります。そうでない場合は None です。 とあるように、wc.stdoutはファイルオブジェクトです。「実行結果を文字列にしたもの」ではありません。 文字列を取りだすなら、 readline等で、ファイルオブジェクトから文字列を読み出す必要があります。 number=end_of_pipe.readline() print number http://www.python.jp/doc/release/library/stdtypes.html#bltin-file-objects
その他の回答 (1)
- kmee
- ベストアンサー率55% (1857/3366)
どのような方法がお望みでしょう? ・Linuxのコマンド「head -n 20 test |grep '2011'|wc -l」 を実行したい → os.systemや subrprocessモジュールを使う。例えば。 import os os.system("head -n 20 test |grep '2011'|wc -l") けど、これならPythonでなくてもシェルスクリプトで可能。 ・「先頭20行の '2011'が含まれる行を数え、出力する」ということがしたい → そのままの処理をPythonで書いてください。 基本操作ばかりなはずです。 ファイルのopenの方法がわからない、とか、含まれてるかどうか調べる方法がわからない、ということなら、まずは参考書とかマニュアルで関係しそうなところだけでも調べましょう。それでわかるはずです。 ・それ以外 → もっと詳しくやりたいことを書いてください。
お礼
ありがとうございます。 やりたいことは1990から2011のワードをカウントして出力するというものです。 コマンドラインで出来る操作なので、それをプログラミングに書けば簡単に出きると思ったのですが、それってつまりプログラミングでも簡単にかけるってことですよね。勉強します。 ちなみに、subprocessモジュールでやる場合のやり方がよく分からないので教えていただけますでしょうか。 以下のように組んだのですが、 <open file '<fdopen>', mode 'rb' at 0x2b1268d74780> というエラーが出てしまいます。 1 import subprocess 2 head=subprocess.Popen(['head','-n','20','test’], 3 stdout=subprocess.PIPE, 4 ) 5 grep=subprocess.Popen(['grep','2011'], 6 stdin=head.stdout, 7 stdout=subprocess.PIPE, 8 ) 9 wc=subprocess.Popen(['wc','-l'], 10 stdin=grep.stdout, 11 stdout=subprocess.PIPE, 12 ) 13 end_of_pipe=wc.stdout 14 print end_of_pipe
お礼
できました! ありがとうございます。 分からないことがあったら公式から調べるのがいいとよく聞くのですが、いまいち調べ方が分かりませんでした。こうやって調べていくのですね。 ずっと悩んで困っていたので本当に助かりました。ありがとうございます!!