2017-10-11 23 views
1

シェルスクリプトから呼び出されるPythonスクリプト(Python 3.6)があります。このシェルスクリプトは、Pythonスクリプトを呼び出す前にいくつかの関数を定義しています。 Pythonコードでは、これらの関数をサブプロセス内で使用したいと考えています。 /bin/sh: func1: command not foundサブプロセスからシェルスクリプトで定義された関数を呼び出す

はここで、私はエラーを取得することを実行しているときに私は、Pythonスクリプトが

# my_script.py 
import subprocess 
p = subprocess.Popen("func1", 
        stdout = subprocess.PIPE, 
        shell = True) 

# Shell script 
function func1() { 
    echo "func1 completed" 
} 
python /path/to/my_script.py 

やろうとしているものの例です。

shell = Falseを使用して試しましたが、env = os.environos.systemを渡しましたが、同様のエラーが発生します。これができる方法はありますか?

+0

機能ごとに別々のスクリプトを作成し、これらの分離されたスクリプトを 'Popen'で呼び出す方が簡単ではないでしょうか? – BartoszKP

答えて

0

sourceまたは.のファイルを読み、functionを呼び出してください。ソースはbashスクリプト定義関数をロードします。 正しい方法はsource my_scripts.sh && func1です。

EDIT: このソリューションが付属しています。

bash 
#!/bin/bash 
function func1() { 
    echo "func1 completed" 
} 
function invoke_python(){ 
    python a.py 
} 
if [ -z "[email protected]" ]; then 
    invoke_python 
else 
    "[email protected]" 
fi 

と私はそれを得ました。

import subprocess 
p = subprocess.Popen("./a.sh func1", 
     stdout = subprocess.PIPE, 
     shell = True) 
p.wait() 
+2

そこにはいくらかの円があります。 script.shやPythonスクリプトを先に実行していますか? [this thread](https://stackoverflow.com/questions/8818119/how-can-i-run-a-function-from-a-script-in-command-line)を見てください –

+0

私はそのスレッドあなたはこの質問のための最善の答えを指摘:)! –

+0

これは、シェルスクリプトがPythonスクリプトを呼び出すため動作していないと思われるので、最初のソースから2番目のソースを取得すると、無限ループになっているように見えます。 – foglerit

関連する問題