从PHP启动时,Python脚本不会启动另一个python脚本

时间:2017-01-04 23:06:53

标签: php python python-2.7

我编写了以下测试PHP代码,它将运行python脚本,请注意列出了3种方法(全部工作)。最后一个方法将运行python脚本,但不会导致PHP页面等待它完成。

 <?PHP
  $SKU= 'asdfghyt42';
  $showID = '60';


  //method 1
  $command='C:\Python27\python.exe python\pythontesting.py $SKU $showID';
  $buffer='';
  ob_start(); // prevent outputting till you are done
   passthru($command);
  //get the result out
 $sketchfabKey=ob_get_contents();
  //clean up the buffer
 ob_end_clean();
 echo $sketchfabKey; 


 /*
 /method 2
 $command = escapeshellcmd('C:\Python27\pythonw.exe python\pythontesting.py $SKU $showID');
$output = shell_exec($command);
echo $output;


 // method 3
$command="C:\Python27\pythonw.exe python\pythontesting.py $sketchfabKey $SKU"; 
$out = 0;
ob_end_clean();
ignore_user_abort();
ob_start();
header("Connection: close");
echo json_encode($out);
header("Content-Length: " . ob_get_length());
ob_end_flush();
flush();
  exec($command);
  */

 ?>

python脚本将打开一个Windows消息框并告诉你它是python脚本1

import win32api
import sys
import subprocess

win32api.MessageBox(0, '1:', 'yay', 0x00001000)
p = subprocess.call([sys.executable, 'pythontesting2.py'], stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
print "I am alive"

一旦用户点击消息框上的确定按钮,它应该运行下一个python脚本,它与消息框做同样的事情,说明它是脚本2

import win32api
import sys
import subprocess

win32api.MessageBox(0, '2:', 'yay', 0x00001000)
p = subprocess.call([sys.executable, 'pythontesting3.py'], stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
print "I am alive"

这是问题发生的地方。如果我从python shell运行第一个python脚本,它的工作方式与预期一致,并给我一个带有1的消息框,然后是一个带有2的消息框。

然而,当PHP页面执行第一个python脚本时,python将只执行第一个脚本中的代码并给我一个消息框1.当我单击确定时,我没有得到第二个消息框,因此得出结论第二个python脚本永远不会启动。

我认为这可能是Windows的权限问题,将python.exe设置为以管理员身份运行,并确保所有权限都设置为完全控制。它没有改变任何东西。

以下是系统的一些信息,如果这将有所帮助:
Python 2.7
webserver通过Apache在本地运行,并使用XAMPP

进行设置

0 个答案:

没有答案