【发布时间】:2021-04-02 22:33:38
【问题描述】:
请注意,我们使用 aws-lambda 来执行一个使用 python subprocess popen 函数的 php 脚本。我们使用以下代码在python popen中调用文件:
import json
import subprocess
# if the script doesn't need output.
def lambda_handler(event, context):
cmd = ["/usr/bin/php74/", "/home/admin/web/path/post.php"]
proc = subprocess.Popen(cmd, shell=True,stdout = subprocess.PIPE, stderr = subprocess.PIPE)
script_response = proc.stdout.read();
它显示一条消息,表明数据已成功记录,但无法执行脚本。脚本很简单。它是关于向表中插入一行。我们该怎么办?
更新: 这是我在测试 lambda 函数时收到的消息:
Response:
null
Request ID:
"37e74321-4232-4d1f-aea8-3d5a82444de2"
Function logs:
START RequestId: 37e74321-4232-4d1f-aea8-3d5a82444de2 Version: $LATEST
END RequestId: 37e74321-4232-4d1f-aea8-3d5a82444de2
REPORT RequestId: 37e74321-4232-4d1f-aea8-3d5a82444de2 Duration: 43.42 ms Billed Duration: 44 ms Memory Size: 128 MB Max Memory Used: 53 MB Init Duration: 113.16 ms
我经过验证的 php 脚本放在这里
<?php
$con1 = mysqli_connect("endpoint","###","###","database");
if(mysqli_query($con1,"insert into ex_inbox(time) values ('Done')") or die("the eror ".mysqli_error($con1)));
?>
【问题讨论】:
-
你不应该得到 errno 2 或 126 的异常吗?删除
shell=True并修复二进制文件的路径。 (当然不是目录。) -
这段代码可以在你的本地机器上运行吗?
-
基本上我的环境是基于php的,我没有在我的本地机器上安装python。由于 aws lambda 没有 php 运行时,我不得不使用 python 来执行 php 脚本。所以不知道它是否在本地机器上工作
-
您正在运行 Python Lambda 并希望运行 PHP 脚本。我认为这行不通,因为 Python Lambda 运行时不包含 PHP 运行时。应该没有
/usr/bin/php74/并且您的脚本post.php将在/home/admin/web/path中不可用。既然查询极其简单,为什么不用Python写呢?
标签: python php json aws-lambda