我正在尝试在后台执行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服务器运行时不起作用。
答案 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');
查看任何错误消息。