【问题标题】:python subprocess popen does not execute php scriptpython子进程popen不执行php脚本
【发布时间】: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


【解决方案1】:

AWS lambda 环境将在您定义的处理程序方法返回后立即过期,因此无法直接在您的 lambda 环境中运行后台脚本/进程。您可以通过在调用 PHP 脚本后手动等待一段时间来解决此问题:

proc = subprocess.Popen(cmd, shell=True,stdout = subprocess.PIPE, stderr = subprocess.PIPE)
# wait for your subprocess to complete
time.sleep(10)
script_response = proc.stdout.read(); 

【讨论】:

  • 好的,运行你的代码。遇到错误“任务在 3.00 秒后超时”。仍然没有在我的表中插入行。
  • 这个错误是来自您的 PHP 脚本还是 Python 代码? @husaindevelop,也可以尝试不使用shell=True
  • 否,php脚本完好,已检查。去掉“shell=true”,显示“errorMessage”:“[Errno 2] No such file or directory: '/usr/bin/php74/'”,
  • 您还必须从其配置中增加 lambda 的超时参数(最大限制为 15 分钟)。 @husaindevelop
  • 感谢您的持续回复。在 lambda 的基本配置设置中将其更改为 14 分 3 秒。现在,没有出现任何错误,但 mysql 表中仍然没有插入任何行。
猜你喜欢
  • 2015-03-11
  • 2020-08-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-05
  • 1970-01-01
  • 2012-06-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多