试图从PHP脚本运行python脚本:返回一个pid但不执行

时间:2017-05-19 00:11:50

标签: php python linux bash

我正在尝试在后台执行python脚本,并从一个php脚本中获取一个pid,该脚本通过单击按钮调用。这里的问题是PID不存在,并且没有完成python脚本的任务。我不确定发生了什么。我使用终端测试了python脚本,它就像一个魅力。

<!DOCTYPE html>
<html>
    <body>
        <?php
            echo 'Starting the mapping process';
            echo exec('python frist_script.py > /dev/null 2>&1 & echo $!');
            //echo exec('ls > /dev/null 2>&1 & echo $!;');
        ?>
    </body>
</html>

python脚本只执行ls并将输出写入文件。 python脚本的代码如下。

import os
import datetime, time
import sys
import argparse
import psutil
import glob
import select

os.system('ls >output_files.dat')

注意:这不是最终的脚本,而是一个测试脚本,用于确认我的python脚本调用是否正常。

非常感谢任何帮助。

谢谢

PS:输出ls -al

-rw-rw-r--  1 acs      www-data     262 May 18 16:31 execute.php
-rwxr-xr-x  1 www-data www-data     147 May 18 16:17 frist_script.py

我也试过shell_exec();

编辑:我试图运行一个简单的shell脚本,但是也没有执行,但Shell命令可以正常工作。

更新: python脚本或shell脚本在从终端php execute.php执行时有效,但在从Web服务器运行时不起作用。

1 个答案:

答案 0 :(得分:0)

  

问题:...但从网络服务器运行时无效。
  您的服务器是否支持

创建新脚本或将os.system(...替换为:

import subprocess
try:
    # os.system('ls >output_files.dat')
    lsoutput = subprocess.check_output('ls', stderr=subprocess.STDOUT)  
    print('ls output:', lsoutput)
except subprocess.CalledProcessError as e:
     print("CalledProcessError:", e)

php script 调用此脚本。

改变
 echo exec('python frist_script.py > /dev/null 2>&1 & echo $!');

 echo exec('python frist_script.py >> /tmp/php_exec 2>&1');

查看任何错误消息。