2013-10-25 33 views
1

我有for循環和glob和os模塊的問題。 在python Shell中打印出來,但是當我在php中嵌入python腳本時,它不起作用。Python腳本在PHP中運行時跳過與os和glob模塊的線

通過PHP下面的python只打印「第一」和「第二」,但不打印「當前文件是:...」。

也許我找到另一種方式來閱讀目錄? glob和os模塊與PHP不兼容?

蟒蛇:

print("first") 
path = 'cat/tryfile' 
for infile in glob.glob(os.path.join(path, '*.jpg')): 
    print("current file is: " + infile) 
print("second") 

PHP:

$param1 = "first"; 
$param2 = "second"; 
$param3 = "third"; 


$command = "C:\\python27\\python C:\\Python27\\execprova.py"; 


#FIRST PYTHON embedding with popen 

$command .= " $param1 $param2 $param3 2>&1"; 
$temp = exec($command, $return); 
echo "INIZIO PID"; 
$pid = popen($command,"r"); 
echo "<body><pre>"; 
while(!feof($pid)) 
{ 
echo fread($pid, 256); 
flush(); 
ob_flush(); 

usleep(100000); 
} 
pclose($pid); 


#SECOND PYTHON embedding with exec   
echo (" {PHP inizio command output return ed exec /PHP} "); 

$command = "C:\\python27\\python C:\\Python27\\bp1imgsenzaprint.py"; 
$output = null; 
$temp = exec($command); 


function success() 
{ 
$mystring = exec('C:\\python27\\python C:\\Python27\\bp1imgsenzaprint.py', $output); 
var_dump($output); 
var_dump($mystring); 
print_r($output); 
} 

print("SUCCESS"); 
success(); 
+1

在Python腳本的'path'變量中使用絕對路徑而不是相對? –

+0

是的,現在它的作品! – postgres

回答

1

在CLI腳本使用相對路徑時務必小心。工作目錄和PATH環境變量通常不是您通常所期望的。

在Python中,你可以設置working directory(類似於在Windows/* nix中的cd command)與os.chdir(path),使您可以放心地使用相對路徑,或代替任何硬編碼或串聯與相關文件中包含的目錄路徑使用絕對路徑路徑。

+0

我提到'PATH'主要是爲了個人經驗:Windows下的Python 2.7沒有'shell = True'參數的subprocess.Popen()'不會與系統的'PATH'一起運行;通過Ubuntu的crontabs運行的shell腳本也不使用用戶的'PATH'而沒有一些hackarounds /導入。所以,如果相對路徑不是問題,那麼您應該接下來檢查給定腳本中'PATH'變量的值。 –