• ベストアンサー

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」が返されるようにしたいです。 どのようにすればいいのでしょうか。よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.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

thjki6624
質問者

お礼

できました! ありがとうございます。 分からないことがあったら公式から調べるのがいいとよく聞くのですが、いまいち調べ方が分かりませんでした。こうやって調べていくのですね。 ずっと悩んで困っていたので本当に助かりました。ありがとうございます!!

その他の回答 (1)

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.1

どのような方法がお望みでしょう? ・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の方法がわからない、とか、含まれてるかどうか調べる方法がわからない、ということなら、まずは参考書とかマニュアルで関係しそうなところだけでも調べましょう。それでわかるはずです。 ・それ以外 → もっと詳しくやりたいことを書いてください。

thjki6624
質問者

お礼

ありがとうございます。 やりたいことは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

関連するQ&A

  • コマンドラインによる実行とjupyterでの実行

    pythonの実行には例えばjupyter notebook, spyder, Gooogle collaboなどGUI風の開発環境がありますが、コマンドラインで実行することを想定したものをそのままGUIで実行するにはどうしたらいいでしょうか。 例えば、python hoge.py xxx.dat yyy.dat のようにしてコマンドラインで実行することが想定されているコードですが、hoge.pyをGUIで実行するときにxxx.dat とかyyy.datをどう指定するかということです。ソースプログラムをそれ用に書き換えるということになるのでしょうか。 よろしくお願いします。

  • python スクリプトファイルの実行

    プログラム初心者です。 pythonを始めて間もないです。 環境はwindows XPでpython2.6を使っています. IDLEエディタでprint "hello" と記入し、test.pyを作成しました。 保存先はC:\Python26になります。環境変数もコマンドラインでpythonと入力すれば起動してくれるように設定しています。 そこで、コマンドラインにpython test.pyと入力すると、File"<stdin>",line 1 python test.py SyntaxError: invalid syntax と返ってきます。 色々調べてみたのですが解決できず質問させていただきました。 どうかよろしくお願いします

  • シェルスクリプトとコマンドライン

    iptablesログからSRC=10.10.10.10の通信ログを取得しようとしました。 見よう見まねで下記コマンドラインを作成しました。 【コマンドワンライナー】 for ((i=1;i<9;i++));do da="2013012"$i;logfile=iptables.log-$da.gz ; echo -n $ logfile':';zcat $logfile | grep SRC=10.10.10.10 |wc -l;done 2>/dev/null このとき、所々に「;」を入力しました。 なぜ、;(セミコロン)をそこで入れる必要があったのかが分からないのです。 多分シェルスクリプトで記述した時の 「改行の位置?」ではないかと思っているのですが この認識で間違っていないでしょうか? 【シェル記述 改行の位置で;(セミコロン?)】 #!/bin/sh for ((i=1;i<9;i++))  do da="2013012"$i  logfile=iptables.log-$da.gz  echo -n $logfile':';zcat $logfile | grep SRC=10.10.10.10 |wc -l done 2>/dev/null ご教授お願いします。

  • pythonコマンドでオプションを使いたい

    現在raspberry piでpythonを使ったプログラムをやっています。pythonのコードで、linuxのコマンドのように、複数のオプションを設定して、それに応じた結果を返すようにしたいです。 そのようなことを実現する方法としてpythonにはパースという機能があるというのを知ったのですが、 http://docs.python.jp/2/library/argparse.html こちらのサイトに載っている $ python prog.py 1 2 3 4 4 $ python prog.py 1 2 3 4 --sum 10 このように複数のオプションのを設定してその合計を出力するような例が載っていたのですが、このプログラムをどのように書けば良いか、具体的によくわかりません。 ご教示いただきますよう、よろしくお願い致します。

  • シェルの実行中にユーザ切り替えてコマンド実行

    はじめまして。 シェル初心者です。 shell.shをrootユーザでクーロン実行していますが、 shell.shの処理の中で、違うユーザでコマンド実行したいのですが、 可能かどうかも、方法が分かりません。 教えていただけないでしょうか。 環境はLinuxです。 下記のコマンドを実行したいです。 リモートでログインしてコマンド実行結果を取得する ssh -l tomcat server_tomcat grep test /tmp/test.log ※他のユーザでsshを実行してコマンド結果を取得したいです。 以上。宜しくお願い致します。

  • コマンドラインの実行について

    最近LINUXを始めたものです。よろしくお願いいたします。 フラッシュプレイヤーのLinuxをダウンロードして、インストールしようとしているのですが、Macromediaのページを見ると、 「ファイルを展開すると、"install_flash_player_7_linux" ディレクトリが生成されます。このディレクトリにアクセスし、コマンドラインに「./flashplayer-installer」と入力してインストーラーを実行します。(メモ: この手順はコマンドラインからのみ実行可能です。)インストーラーからすべてのブラウザを閉じるよう指示があるので、この指示に従います。」 と出ていますが、コマンドラインとはどうやって実行するのでしょうか?Fedora Core4で、GUIを使用しています。 http://www.macromedia.com/shockwave/download/download.cgi?P1_Prod_Version=ShockwaveFlash

  • Eclipseでコマンドラインを入力できませんか?

    コマンドラインについて質問です。 例えば、入力された数字で掛け算を行うサンプルがあるとします。 それをEclipseのメニュー→「実行」でテストした場合、数字を入力できず何も起こりません。(当たり前?) Eclipseから入力できればファイル変換しなくて済むので、 テストが簡単になると思うのですが…。 どうにかして入力できるようになりませんかね?

    • ベストアンサー
    • Java
  • grepの出力結果の保存

    LinuXのgrepコマンドに関する質問です。 既存のファイルからgrepコマンドで特定の文字列が含まれた行だけを抽出し、その行数を数えるという課題です。 行数を数えるのでwcコマンドを使おうと思ったのですが、wcコマンドは「wc (ファイル名)」という使い方をしますよね。 ということは、grepコマンドで抽出した結果をファイルに保存しなくてはならないのですが、やり方がわかりません。

  • MacでPython スクリプトファイルの実行

    自分はMacユーザです。 プログラミングに興味があったので Python2.6のインストールと入門書の購入をしました。 スクリプトファイルの実行をしたいのですが、やり方がわかりません。 Macにあるテキストエディタで print "hello" と入力して、test.pyという名前でデスクトップに保存しました。 購入した本には「LinuxやMac OS Xであれば、シェルからコマンドを入力します。」と記されています。 そもそもシェルの意味が分かりません。。。 「python test.py」と入力とも書いてあるのですが、どこに書くのでしょうか。。 ネットで簡単に調べてみたのですが、いまいち分かりません。 初心者なので、分かりやすく回答して頂けるとありがたいです。 どうか、よろしくお願いします。

  • sendmailの送受信件数

    sendmailのログから送受信件数を取得するには どのようにすればよろしいでしょうか? 下記のコマンドを実行し他のです zcat maillogyyyymmdd.Z | grep from | wc -l(受信) zcat maillogyyyymmdd.Z | grep -i stat=sent | wc -l (送信)