无法从PHP shell_exec执行Python脚本

时间:2017-04-27 19:55:04

标签: php python

我试图从PHP shell_exec函数执行python(Python 3)脚本,但它似乎没有工作,我在Windows系统上尝试它但它将在CentOS 7中投入生产。

在下面的代码片段中,PHP运行时没有任何反应。但是我使用它显示PHP版本的$response = shell_exec("php -v");行。我也试过直接在命令行上运行python脚本,运行正常但没有错误。

代码

    $command = "\"C:\Programs\Python\Python36-32\python.exe\" \"E:\\htdocs\\dev\\_nodes\\jobs\\jobCheck.py\" \"https:/www.google.ie\" 1";
    $response = shell_exec($command);
    //$response = shell_exec("php -v");
    echo $response;

命令行

"C:\Programs\Python\Python36-32\python.exe" "E:\\htdocs\\dev\\_nodes\\jobs\\jobCheck.py" "https:/www.google.ie" 1

更新#1

我已经通过PHP运行了python脚本,但是python脚本一旦命中driver = webdriver.PhantomJS()就会崩溃,导入存在于python脚本from selenium import webdriver中,并且所有这些功能都能正常运行一次直接通过命令行调用,但是从PHP调用python脚本后似乎无法工作。

这是一个示例脚本,在从PHP脚本调用时打印出test 1但不打印test 2

from selenium import webdriver

print("test 1")

driver = webdriver.PhantomJS()

print("test 2")

driver.quit()

更新#2

看起来这是路径的问题,在python脚本中创建了一个使用相对路径的文件,一旦我将路径更改为完整路径,脚本在命令行中运行正常并且在通过PHP脚本调用。

1 个答案:

答案 0 :(得分:-1)

你需要scape命令字符串。

尝试使用escapeshellarg功能。

$command = escapeshellarg('C:\Programs\Python\Python36-32\python.exe "E:\htdocs\dev\_nodes\jobs/jobCheck.py" "https:/www.google.ie" 1');
$response = shell_exec($command);
//$response = shell_exec("php -v");
echo $response;

http://php.net/manual/pt_BR/function.escapeshellarg.php