2013-10-25 32 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'变量的值。 –