2015-10-01 29 views
0

您好我有以下用python腳本pythonscript1.py寫在目錄/ home/user/a /中的debian目錄下:「沒有這樣的文件或目錄」在python腳本中調用debian linux中的其他python腳本

import subprocess 
subprocess.call(["python" /home/user/b/phpcall.py"]) 

其中phpcall.py腳本包含:

import subprocess 
subprocess.call(["php", "/home/user/b/phpscript1.php"]) 

分別從控制檯的所有腳本功能完美調用,但是當我使用的第一個腳本,而第二個腳本調用/查找目錄b A文件,而不是a,它會產生以下錯誤:

"PHP warning: include_once(something.php): failed to open stream: no such file in /home/user/b/phpschript1.php on line 25 

現在對我來說很明顯,問題是它無法觸及它的原始目錄。但我不知道應該在第一個腳本中添加什麼命令才能讓第二個腳本在文件夾b中查找。

到目前爲止谷歌的結果已經提出了一些與「include_path ='包括'」,但我不知道如何/在哪裏將語句成功地合併。

任何關於正確語法的建議將不勝感激!

+0

首先將python的工作目錄改爲'/ home/user/b'?或者改爲將php的include調用改爲include('/ absolute/path/to/something.php')。 –

+0

謝謝,第一個顯而易見的是,我現在正在使用Google搜索,如果我在第一個選項中沒有成功,我會嘗試合併第二個選項。 –

回答

0

以供將來參考的是直接調用的PHP腳本從蟒內是代碼:

import os 
os.chdir("/home/user/b") 
os.system("php /home/user/b/phpscript1.php") 

.Thanks馬克乙 &我愛的動態方法塞巴斯蒂安,謝謝:)

0

可以試試這個程序:

import subprocess 
import sys 
proc = subprocess.Popen(
     [sys.executable, '/home/user/b/phpcall.py'],stdin=subprocess.PIPE) 

proc.communicate() 

我認爲這是工作。如果不讓知道。

+0

謝謝你的建議Najeeb!它的工作:) –

0

如果只是如果從使用Python腳本的目錄啓動它,那麼你可以使用cwd參數更改工作目錄子進程的php腳本工作:

#!/usr/bin/env python 
from subprocess import check_call 

check_call(["php", "/home/user/b/phpscript1.php"], cwd="/home/user/b") 

我已經添加了家當#!/usr/bin/env python所以你可以直接運行腳本/path/to/phpcall.py,假設它是可執行的(chmod +x phpcall.py)。

注意:如果你想運行python腳本作爲user用戶,那麼你可以使用~指定路徑:

#!/usr/bin/env python 
import os 
from subprocess import check_call 

script_dir = os.path.expanduser("~/b") 
check_call(["php", os.path.join(script_dir, "phpscript1.php")], cwd=script_dir) 

爲了避免硬編碼的腳本目錄,你可以動態地發現:

#!/usr/bin/env python 
import os 
from subprocess import check_call 

script_dir = get_script_dir() 
check_call(["php", os.path.join(script_dir, "phpscript1.php")], cwd=script_dir) 

其中get_script_dir()

相關問題