将PHP变量转换为Python

2024-09-30 01:31:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我知道有像我这样的问题已经问过了,但即使有这些问题的答案,我也搞不懂。在

菲律宾比索:

<?php
$var1 = "hi";
$result = shell_exec('TestingStuff.py'.$var1);
?>

Python:

^{pr2}$

在Python中运行时收到错误:

IndexError: list index out of range

两个脚本都在同一个文件夹中。在

有人能提供一个关于代码更改的答案吗?在


Tags: 答案pyindex错误resultshellhilist
1条回答
网友
1楼 · 发布于 2024-09-30 01:31:44

错误

如果Python脚本完全没有参数运行,那么sys.argv[1]索引超出范围。在

脚本

ExecPython.php

<?php
$var1 = "hi";
$result = shell_exec('TestingStuff.py ' . $var1);

echo "<pre>$result</pre>";

TestingStuff.py

^{pr2}$

演示

enter image description here

说明

  1. 我们将从Python脚本开始。目标是,脚本打印传递给它的第一个参数,而不会遇到“IndexError:list index out range”错误。在

    • python TestingStuff.py 123我们想要输出123。在
  2. 在Python中,传递给脚本的参数位于sys.argv。这是一张单子。sys.argv[0]始终是脚本名称本身(这里是TestingStuff.py)。使用上面的例子,sys.argv[1]现在是123。

  3. 处理边缘情况:“没有参数”。在

    • python TestingStuff.py

    这将导致“索引器错误:列表索引超出范围”错误,因为您正在尝试访问列表元素,而该元素不在那里。sys.argv[0]是脚本名称,而sys.argv[1]未设置,但您正在尝试打印它,BAM出现错误。为了避免错误并只打印第一个参数,我们需要确保列表sys.argv包含多个元素(多于脚本名称)。这就是为什么我添加了if len(sys.argv) > 1:。在

    这意味着:如果列表有多个参数,则只打印第一个参数。

  4. 现在我们可以独立地测试Python脚本-有参数也可以不带参数。 然后切换到PHP脚本。

  5. 目标是从PHP执行Python脚本。在

    PHP提供了几种执行脚本的方法,例如exec()、passthru()、shell_exec()、system()。这里我们使用的是shell_exec()。shell_exec()返回与之一起运行的脚本或命令的输出。在

    换句话说:如果您运行$result = shell_exec('php -v');,您将得到$result中的PHP版本行。在

    这里我们执行Python脚本TestingStuff.py,并添加一个参数,即$var1。它是一个字符串,通过连接添加到shell_exec()的字符串中。对$result进行回显。我将pre标记包装在它周围,因为我认为这是在web/browser上下文中执行的。如果只在CLI上使用脚本,则可能会删除pre标记。

执行流程

  • 执行PHP脚本
  • shell_exec()执行Python脚本
  • shell_exec()将Python脚本的输出返回为$result
  • $result由PHP通过echo打印

相关问题 更多 >

    热门问题