2011-12-09 8 views
0

私はpythonスクリプトからunixのsourceコマンドを呼び出すようにしていました。私はそれをサブプロセスでやってみようとしていました.Open環境を渡してください。以下はPythonスクリプトからのソースコマンドの使用

コマンドを実行するタスクを実行するための私の関数である。

def run_command(command, tst_env): 
    print tst_env 
    try: 
     p = subprocess.Popen(command, env=tst_env, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True) 
     stout, er = p.communicate() 
     print stout, er 
     ret = p.wait() 
    except Exception, e: 
     print "Exception: ", e 
    else : 
     if ret: 
      print command, "failed", ret 
      return 
     else: 
      print command, "succeeded", ret 
    return p 

tst_envははos.environ型のオブジェクトです。

run_command(source script.sh, os.environ)となっています。

しかし、私はスクリプト内の関数にアクセスすることができません。

場合は、このようなものです:

script.shは次のとおりです。

function task_test() { 
    echo "Test function called" 
} 

source script.sh 

task_testは、シェルスクリプトで関数を呼び出します。

しかし、シェルスクリプトの関数をpythonから呼び出すことはできません。

希望です。

+3

あなたは、何にアクセスできないのか、どこから来ているのかを詳しく調べることができます – avasal

+2

次の質問は[MarkDownの使い方を学んでください](http://stackoverflow.com/editing-help)ください! :) – mac

+0

スタウトとは何を言っているのですか?そして、シェルスクリプトが正常に実行された場合、何を言いますか? 'p.wait()'は必要ありません。 - 'p.communicate()'はサブプロセスが終了するまで戻りません。 – Dave

答えて

1

subprocessは実行するためのものです。シェル関数とPythonの間の橋渡しはありません。シェルファイルを "ロード"して呼び出すことのできるPythonオブジェクトとして扱うことはできません。スクリプトの内容を実行するだけで済みます。

+2

これを行う方法はありますか? –

+1

@GeorgeThomas:実際にはそうではありませんが、この種の 'source file.sh;を実行することによって、与えられた関数を実行するものを書くことができます。 [機能] 'もの。 –

関連する問題