2017-10-11 77 views
1

我有一個Python腳本(Python 3.6),用於從shell腳本中調用。這個shell腳本在調用Python腳本之前定義了一些函數。在Python代碼中,我想在子進程中使用這些函數。從子進程調用shell腳本中定義的函數

這裏是我想要做的

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

的Python腳本

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

但是,在運行時,我得到了錯誤的例子:/bin/sh: func1: command not found

我試過它使用shell = False,通過env = os.environ,並與os.system但我得到類似的錯誤。有沒有辦法做到這一點?

+0

爲每個函數創建一個單獨的腳本並用'Popen'調用這些解耦腳本不是更容易嗎? – BartoszKP

回答

0

您應該使用source或只是.讀取文件,然後調用函數。 Source將加載bash腳本定義的函數。 正確的方法將是source my_scripts.sh && func1。編輯: 我來這個解決方案。

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 

和python我明白了。

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

那裏有一些圓圈。你是先執行你的script.sh還是你的python腳本?看看[這個線程](https://stackoverflow.com/questions/8818119/how-can-i-run-a-function-from-a-script-in-command-line) –

+0

我相信線程你指出的是這個問題的最佳答案:)! –

+0

這似乎沒有工作,因爲shell腳本調用Python腳本,所以當我從第二個腳本中獲取第一個腳本時,它看起來像進入了一個無限循環。 – foglerit