【问题标题】:How can run python on php? [duplicate]如何在 php 上运行 python? [复制]
【发布时间】:2018-02-05 06:07:14
【问题描述】:

我用表格制作了一个数据输入网页。 我想使用网页中的值在服务器上运行 python 脚本并在服务器上创建一个输出文件。 现在我可以输入数据并提交网页了。但是python脚本没有在服务器上创建输出文件。

以下是我的脚本。

首先,我连接到 index.php 并在表单上输入一些文本并提交

下面是index.php

<html>
<body>

<form action="1test.php" method="get">
<input type="text" name="name" />
<input type="submit" />
</form>

</body>
</html>

其次,1test.php 使用 index.php 上的表单值执行 test.py。

下面是1test.php

<?php
$name = $_GET['name'];
$cmd = "python test.py " . $name;
echo $cmd;
exec($cmd);
?>

我的脚本在 python 脚本之前工作。我可以在网上看到 $cmd 值。但是php不能执行python。 python脚本具有执行权限。 最后,python 脚本在服务器上创建文件。表单值将是 python 上的数组数据。

下面是test.py

import sys
sip = sys.argv[1]
with open("doc.txt",'w') as f:
        f.write(sip)
f.close()

【问题讨论】:

  • 我尝试使用文件完整路径。但是不行。
  • 哪个用户拥有 python 脚本?小心命令注入,这不是很好。例如:Hello; rm ../ -rf
  • python 脚本所有者是用户。该用户可以直接在服务器上执行脚本
  • 那个问题的答案是行不通的。
  • 您是否尝试过检查错误,例如exec...的输出?

标签: php python html


【解决方案1】:

尝试使用2&gt;&amp;1 将错误从stderr 重定向到stdin 并捕获退出代码:

<?php

$name = $_GET['name'];
$cmd = escapeshellcmd("python test.py $name 2>&1");

echo "$cmd" . PHP_EOL;

exec($cmd, $output, $return_var);

echo "$return_var:" . PHP_EOL;
print_r($output);

$output 是一个行数组。如果脚本返回0(值为$return_var),则表示成功。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-22
    • 2017-04-04
    • 1970-01-01
    • 2020-08-27
    • 1970-01-01
    • 1970-01-01
    • 2022-08-18
    • 2021-12-10
    相关资源
    最近更新 更多