2013-10-25 1 views
1

У меня проблема с циклами, модулями glob и os. В оболочке python печать печатается, но когда я внедряю свой скрипт python в php, он не работает.Сценарий Python переводит строку с модулями os и glob при запуске в PHP

Питон ниже через PHP печатает только «первый» и «второй», но не печатает «текущий файл: ...».

Возможно, я нашел другой способ для чтения каталога? Модули 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 вместо относительной? –

+0

да теперь это работает! – postgres

ответ

1

Всегда соблюдайте осторожность при использовании относительных путей в сценариях CLI. Рабочий каталог и переменная окружения PATH часто не то, что вы обычно ожидаете.

В Python, вы можете установить working directory (аналогично Windows/* Никс-х cd command) с os.chdir(path), так что вы можете спокойно использовать относительные пути, или использовать абсолютные пути вместо либо жестко прописывать или сцеплению, содержащий путь к каталогу с относительным файлом дорожка.

+0

Я упомянул 'PATH' в основном для личного опыта: Python 2.7 под Windows '' subprocess.Popen() 'без параметра' shell = True' не будет работать с системой 'PATH'; shell-скрипты, запущенные через crontabs Ubuntu, также не используют «PATH» пользователя без каких-либо хакерских атак/импорта. Итак, если относительные пути не являются проблемой, вы должны затем проверить значение переменной PATH внутри данного скрипта. –