2010-12-11 14 views
8

私が望むのは、Bash-Terminalに入力するすべてのコマンドがPythonスクリプトでラップされるという仕組みです。 Pythonスクリプトは入力されたコマンドを実行しますが、追加の魔法を追加します(例えば "動的"環境変数の設定など)。 これはどういうことですか?Bash-Shellに入力されたすべてのコマンドをPythonスクリプトでラップする

私はUbuntuとDebian Squeezyを実行しています。

補足説明:

私が動的に変化プロパティファイルを持っているが(いくつかのスクリプトは、いつでもそれを変更します)。すべてのシェルスクリプトで環境変数としてそのファイルのプロパティが必要です。もちろん、私はシェルからプロパティファイルを解析することができますが、Python(およびConfigObject)で行うことができるので、オブジェクト指向のスタイルを使用する方が好きです(特に書き込み用)。

私はすべてのシェルスクリプトにこれらのプロパティを処理するPythonスクリプト(スクリプト自体を変更することなく)ですべてのスクリプトをラップしたいと思います。 これは私の現在のユースケースですが、後でラッパーを拡張できる追加のケースを見つけることができると思います。私は役立つかもしれない二つのことが、何も知らない

+0

あなたは何をしたいのか詳細を教えてください。どのようにシェルコマンドをラップするつもりですか、そしてそれらをどのように実行しようとしていますか?これは2つ(あるいはそれ以上の方法)で行うことができます:a)コマンドを文字列として扱い、その文字列に何かを加え、その文字列をbashで実行します。 b)コマンドを取得し、 'subprocess'などでbashを実行し、コマンドを渡します(別のコマンドが先行します)。 – khachik

答えて

11

Bashシェルに入力されたすべてのコマンド.bashrcの変数PROMPT_COMMANDを変更することです。私は、すべてのコマンドの前にいくつかのPythonのものをしたい場合たとえば、私の質問に尋ねグッド:

の.bashrc:

# ... 
PROMPT_COMMAND="python mycoolscript.py; $PROMPT_COMMAND;" 
export $PROMPT_COMMAND 
# ... 

すべてのスクリプトmycoolscript.pyを実行するコマンドの前に。

0

あなたは

  • http://sourceforge.net/projects/pyshint/
  • iPythonシェル

      がiterpreterでシェルコマンドを実行するためのいくつかの機能を持って従ってください。
  • +1

    私はipythonを知っていますが、私の標準シェルをpy-ifyしたいです;) – ifischer

    1

    バッシュのDEBUGトラップを使用してください。あなたが私が精緻化する必要があるかどうかを教えてください。

    編集:

    は、ここであなたが行うことができるかもしれないものの種類の簡単な例です:

    $ cat prefix.py 
    #!/usr/bin/env python 
    print "export prop1=foobar" 
    print "export prop2=bazinga" 
    $ cat propscript 
    #!/bin/bash 
    echo $prop1 
    echo $prop2 
    $ trap 'eval "$(prefix.py)"' DEBUG 
    $ ./propscript 
    foobar 
    bazinga 
    

    あなたはsecurity risks of using evalに注意する必要があります。

    +0

    デバッグトラップに関するいくつかの情報を読みましたが、私の "問題"のためにそれを使用する方法が見つかりませんでした – ifischer

    +0

    @ifischer:スクリプトは子シェルの環境に影響する可能性がありますが、現在のシェルの環境に影響を与えることはできません。 DEBUGトラップを使用して処理を行う必要があります(多分Pythonで何らかの処理を行い、結果をBashの文字列として出力して何らかの方法で適用する)か、答えで行ったようにラッパーを使用する必要があります。あなたが成し遂げようとしていることについてより具体的な詳細を投稿すれば、私はより多くの助けをすることができます。 –

    +0

    私のxスクリプトですべてのコマンドを実行している限り、変数は現在のシェルで影響を受けていません。だから私はかなりすべてのコマンドの前にxを入力する必要があることを除いて、私の解決に満足しています(しかし、これも、このメカニズムなしでスクリプトを実行したい場合、これは利点があります)。私は私の質問で私のユースケースについていくつかの追加の説明をしました。それが今では十分であるかどうか私に教えてください。 – ifischer

    -2

    あなたがそれを行うための直接的な方法はありません。 しかし、あなたはbashターミナルをエミュレートするためのPythonスクリプトを作ることができます。そして、Pythonの美しい "Subprocess"モジュールを使って好きなようにコマンドを実行することができます。

    関連する問題