【问题标题】:PHP calling Python, returning multiple valuesPHP调用Python,返回多个值
【发布时间】:2012-07-12 23:07:50
【问题描述】:

我正在使用 php 设置一个 SOAP 服务器。在处理 SOAP 请求时,我需要调用一些现有的 python 脚本。这些脚本通常返回 3 个值:成功、描述和数据。

如何将所有三个值都传回 php?

我的要求是:

exec('python test.py', $output);

test.py 会:

from getData import getData

status, description, data = getData()

return status, description, data

我现有的 python 看起来像这样:

def getData():
    database = Database()

    # get all the Data from the db
    data = database.getData()

    if data is None:
        return False, "...notes...", ""

    return True, "...notes...", data

我不确定 test.py 中的返回是否正确。但即使是这样,当我查看 var_dump($output) 时,我看到的只是“数组”

有人有什么想法吗?

TIA,

布赖恩

【问题讨论】:

  • 在命令行执行python test.py会发生什么?
  • 好点。起初我确实有印刷品,但后来改回来了。如果我返回,我会得到“SyntaxError: 'return' outside function”

标签: php python arrays soap


【解决方案1】:

由于exec() 调用将shell 输出接收到变量$output 中,它无法接收Python 函数返回的字符串。您必须打印它们而不是返回它们,并且每条打印的行都会进入exec()数组$output

主脚本必须将值打印到标准输出:

from getData import getData
status, description, data = getData()

# Print the values
print("STATUS:", status)
print("DESCRIPTION:", description)
print("DATA:", data)

在 PHP 中,检查返回的输出:

exec("python test.py", $output);
var_dump($output);

您需要将 Python 中的 print 语句格式化为可以在 PHP 中轻松解析值的格式,例如每行一个内容,或您可以 explode() 的键:值对。

【讨论】:

  • 好的,那么 T/F 会转到 exec 的 return_var 吗?如果我在示例中列出的“注释”是多行可变长度字符串,我是否仍然能够通过 $output[0] 和 $output[1] 中的数据访问它?
  • @BrianCox 对不起,我错了。您对getData() 的调用可以照常工作,但您需要打印python 脚本中的值。如果您期望多行字符串,则需要设计一些方法来解析它们,例如 key: value 对。
  • 如果输出很复杂,我会考虑将 python 输出编码为 JSON,这样在 PHP 中读取会更容易一些。
  • 当我这样做时(从命令行):python test_get_bcas.py 我得到: ('STATUS:', True, '\n') ('DESCRIPTION:', 'Success', '\ n') ('DATA:', ['val1', 'val2'], '\n') 按我的预期工作。但在 php 中,var_dump($output) 给了我:array(0) { } 顺便说一句,感谢您的帮助。 Python 和 PHP 对我来说都是相当新的。我想我知道的就够危险了! :)
  • @ernie JSON 可能也值得研究。谢谢两位的建议!
猜你喜欢
  • 2019-10-30
  • 1970-01-01
  • 2014-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多