从PHP传递到Python的有效路径


Passing a valid path to Python from PHP

我有一个Python程序,它解析文件,以路径作为参数,并解析给定路径和所有子目录中的所有文件-使用os.walk(path)。我想从我的php Web应用程序中调用它,这样用户就可以指定一个路径,然后将其作为参数传递给解析器。(传递一个路径是可以的,因为它都在内部网络上)。

我可以很好地调用解析器并使用popen()传递参数,但是Python程序接收到的路径总是无效的。我已经让php脚本输出它发送到浏览器的命令。如果我将该命令复制并粘贴到命令窗口中,解析器将正常工作。

从Python脚本

os.path.exists(path)的结果我知道php脚本传递的路径是无效的

这是调用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标记)

web服务器和解析器托管在我的本地机器上。

检查PHP服务器以什么用户身份运行。如果I:'是一个网络驱动器,不要期望在该用户下映射这些驱动器。请使用UNC路径。

尝试:

  • 一个不同的路径(我们知道C:'Workspaces'parsers'src'main'工作,为什么你不试试呢?)