2011-12-12 13 views
13

これはおそらく基本的なものですが、良い解決策を見つけることができません。シェルコマンド出力をPythonスクリプト入力にリダイレクトするにはどうすればよいですか?

$ some-linux-command | my_script.py 

このような何か:

cat email.txt | script.py 

それともそれだけではsendmailから直接私の.forwardファイルによってパイプされますが、私はこのようなパイプからの入力を受け付けることができるPythonスクリプトを書く必要が 。これは、添付ファイルがある場合は入力ファイルが比較的大きく、おそらく電子メールになりますが、後で送信者、件名などをデータベースに入れなければならないことになりますが、データベーススクリプトPythonで、その部分がOKになるようにします。 主な問題は、パイプから流入するデータをキャプチャする方法です。入力を読み込むためsys.stdinをオブジェクトのようなファイル

+0

なぜあなたはパイプに固定されていますか、その結果をファイルに書き込むことはできませんか? –

+5

@SrinivasReddyThatiparthy:パイプはUnixの本質であり、あなたのコメントは無効です。 – Stan

答えて

3

。例:s.pyの

例内容:

import sys 
data = sys.stdin.readlines() 
print data 

- 実行:

[email protected]:~$ cat t.txt 
    alpha 
    beta 
    gamma 

    [email protected]:~$ cat t.txt | python ./s.py 
    ['alpha\n', 'beta\n', 'gamma\n'] 

また、このシェバングを使用したシェルスクリプトとしてPythonスクリプトを行うことができます。

#!/usr/bin/env python 

、許可を「a + x」に変更する

[email protected]:~$ cat t.txt | ./s.py 
['alpha\n', 'beta\n', 'gamma\n'] 
21

使用でsys.stdinを、読んでから

+0

ありがとう、それは動作し、ありがたいことに私はそのボックスにsysをインポートすることができます(solaris 10、いくつかのモジュールのために、他のモジュールをインポートする際に問題があります: "ImportError:ld.so.1:/ usr/local/bin/python:致命的:再配置エラー:ファイル/usr/local/lib/python2.6/lib-dynload/_socket.so:シンボルinet_aton:参照されているシンボルが見つかりません "というのは、solarisのinet_ptonだからです) – delta

+8

あなたは正解であれば正解。 – DhruvPathak

関連する問題