![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
今日は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」が返されるようにしたいです。
どのようにすればいいのでしょうか。よろしくお願いします。
No.2ベストアンサー
- 回答日時:
> <open file '<fdopen>', mode 'rb' at 0x2b1268d74780>
エラーではありません。end_of_pipe(=wc.stdout)のオブジェクトの情報が表示されたものです。
http://www.python.jp/doc/release/library/subproc …
> Popen.stdout
> stdout 引数が PIPE の場合、この属性には子プロセスの出力に使われるファイルオブジェクトになります。そうでない場合は None です。
とあるように、wc.stdoutはファイルオブジェクトです。「実行結果を文字列にしたもの」ではありません。
文字列を取りだすなら、 readline等で、ファイルオブジェクトから文字列を読み出す必要があります。
number=end_of_pipe.readline()
print number
http://www.python.jp/doc/release/library/stdtype …
できました!
ありがとうございます。
分からないことがあったら公式から調べるのがいいとよく聞くのですが、いまいち調べ方が分かりませんでした。こうやって調べていくのですね。
ずっと悩んで困っていたので本当に助かりました。ありがとうございます!!
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の方法がわからない、とか、含まれてるかどうか調べる方法がわからない、ということなら、まずは参考書とかマニュアルで関係しそうなところだけでも調べましょう。それでわかるはずです。
・それ以外
→ もっと詳しくやりたいことを書いてください。
ありがとうございます。
やりたいことは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が見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) VScodeでpythonプログラムの関数を実行したい 2 2022/07/13 19:24
- C言語・C++・C# 質問です 下記のコードを分かりやすく解説お願いします 初心者です #include ‹stdio.h 3 2022/05/26 22:03
- ドライブ・ストレージ HDDのチェック方法 6 2022/05/04 09:49
- その他(プログラミング・Web制作) ラズパイ上の、pythonのエラーについて 1 2023/04/12 23:27
- システム ホームページの仕組みについて 3 2022/08/16 14:33
- その他(プログラミング・Web制作) python OpenPyXLを使って出力結果をエクセルに書き込み 2 2022/06/04 19:46
- CAD・DTP Autocad Scriptファイルからの入力とコマンドラインからの入力が違う 1 2023/08/01 09:13
- C言語・C++・C# c言語 配列とポインタについて 3 2023/02/09 22:53
- Java マイクラでPythonのプログラミングができません 3 2023/05/28 07:15
- Excel(エクセル) Excelの置換が上手くいかない Microsoft® Excel® 2019 MSO (バージョン 5 2022/08/17 22:26
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
worksheetFunctionクラスのVloo...
-
「Columns("A:C")」の列文字を...
-
実行時エラー 3265「要求された...
-
[VBA]CDOメッセージ送信エラー
-
VBAで Set wb = Sheets(1).Cop...
-
エクセルのVBAの標準モジュール...
-
PowerPointVBAでスライドマスタ...
-
VBAで作成するメール(開封確認...
-
Excelでフィルタをかけると警告...
-
オブジェクトが見つかりません
-
VBAで既に開いている別アプリケ...
-
(初心者です)VBAについて。「実...
-
VBScriptでファイルの日時順(降...
-
EXCEL VBA オートシェイプナン...
-
Word2007数式でIMEオン/オフを...
-
「オブジェクト変数または With...
-
Visual Basic.NETのエラー("オ...
-
[C#]static void 関数内でthis
-
VB6 ファイルのリネームの仕方
-
ある文字列が全て数字であるか...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
worksheetFunctionクラスのVloo...
-
「Columns("A:C")」の列文字を...
-
実行時エラー 3265「要求された...
-
VBAで既に開いている別アプリケ...
-
エクセルのVBAの標準モジュール...
-
エクセルマクロエラー「'Cells'...
-
Excelでフィルタをかけると警告...
-
VBAで Set wb = Sheets(1).Cop...
-
VBAからPDFファイルにパスワー...
-
テキストボックス中の文字列の...
-
エクセルVBAでcode128のバー...
-
EXCEL VBA オートシェイプナン...
-
VBAで作成するメール(開封確認...
-
PowerPointVBAでスライドマスタ...
-
ある文字列が全て数字であるか...
-
エクセルVBAで配列内に空白デー...
-
[VBA]CDOメッセージ送信エラー
-
オブジェクトが見つかりません
-
UserForm1.Showでエラーになり...
-
上下の位置揃えについて
おすすめ情報