Передача действительного пути к Python из PHP

У меня есть программа Python, которая анализирует файлы, принимает путь в качестве аргумента и и анализирует все файлы по указанному пути и все подкаталоги - используя os .walk (путь) . Я хочу вызвать это из моего веб-приложения php, чтобы пользователь мог указать путь, который затем передается в качестве аргумента синтаксическому анализатору. (Передача пути - это нормально, потому что это все во внутренней сети).

Я могу вызвать синтаксический анализатор и передать аргументы нормально, используя popen () , но путь, который получает программа Python, всегда недействителен. У меня есть php-скрипт, выводящий команду, которую он отправляет в браузер. Если я скопирую и вставлю эту команду в командное окно, синтаксический анализатор будет работать нормально.

Я знаю, что путь, пройденный скриптом php, недействителен из результата os.path.exists (path) в скрипте Python

Это код для вызова программы Python:

$path = $_REQUEST['location'];
echo "Path given is: ".$path;
$command = 'python C:\Workspaces\parsers\src\main\main.py '. intval($mode).'  "'.$path.'"';
echo "<p>".$command."</p>";
$parser = popen($command, 'r');
if ($parser){
  echo "<p>Ran the program</p>";
  while (!feof($parser)){
    $read = fgets($parser);
    if (!$read)
      echo "<p>Reached end of file</p>";        
      else
        echo "<p>".$read."</p>";                 
    }
  }

Команда, отображаемая в браузере, выглядит примерно так:

python C: \ Workspaces \ parsers \ src \ main \ main.py 2 "I: \ Dir1 \ Dir2 \ Dir3"

Где 2 - это просто еще один аргумент для сценарий и $ _ REQUEST ['location'] определяется из текстового поля ввода в форме на вызывающей странице.

Это в системе Windows, поэтому я предполагаю, что это как-то связано с обратными косыми чертами в пути.

В принципе, я не уверен, как обрабатываются все обратные косые черты.Я хотел бы понять, как строки, содержащие обратную косую черту, отправляются на страницу php и как они отправляются снова с помощью popen () . Я думаю, что результат, печатаемый в браузере, не является исходной командной строкой, и я не могу быть уверен, сколько обратных косых черт действительно присутствует в команде, выдаваемой popen ().

Если у кого-то есть идеи, я буду очень признателен.

Изменить:

Итак, в программе Python путь используется следующим образом:

 nfiles=0
 print 'Parsing all files in directory tree '+path+"<br />"
 start = time.time()
 if not os.path.exists(path):
   print "<p>Path is NOT REAL!!!</p>"
 else:
   print "<p>Path IS real!</p>"
 for root, dirs, files in os.walk(path):
   for f in files:
     file = os.path.join(root,f)
     print file
     nfiles+=1
     ...Code to run parser...
 print nfiles, "Files parsed<br />"

Это возвращается браузеру из переменной $ read.

Результатом этого является:

Parsing all files in directory tree I:\Dir1\Dir2\Dir3
Path is NOT REAL!!!

0 Files parsed

Это идентично выводу, если команда запускается из командной строки (команда копируется из браузера и вставляется в окно cmd). ИСКЛЮЧАЯ, когда запускается таким образом, путь ЯВЛЯЕТСЯ реальным, и все файлы анализируются. (и в окне команд также отображается разметка html)

Веб-сервер и парсеры размещены на моем локальном компьютере.

6
задан K4KYA 6 October 2011 в 12:33
поделиться