从PHP中运行Shell命令

3
我可以帮您进行翻译。需求是从我的php脚本运行带有命令行参数的python程序。 这是我的代码:
<?php


$output=shell_exec('python /path/to/python_from_php.py input1 input2');

echo $output;
?>

我将shell_exec函数中的内容作为输出获取。 我尝试仅使用


$output=exec('python /path/to/python_from_php.py input1 input2');

我只能得到第二个输入作为我的输出。 但是我想要的是通过我的Python脚本能够打印出输入内容。如果我删除“echo $output”这一行,我将得不到任何输出。 我的Python代码:
import sys
a=(sys.argv)
for i in (sys.argv):
 print i

3
请查看这个问题:https://dev59.com/qGIj5IYBdhLWcg3w8ZUF - Indra
尝试过了,它只输出 exec 函数内部的字符串,不起作用。 - Niranjan Dattatreya
根据 @Indra 的建议,似乎您需要使用 passthru链接)而不是 exec - Reishin
尝试了甚至是passthru,但没有任何区别,输出相同。 - Niranjan Dattatreya
3个回答

1
这段代码可以让你从 shell 中获取输出。
 <?php
   $output = shell_exec('ls -lart');
   echo "<pre>$output</pre>";
 ?>

从这个参考资料php中,还要确保PHP未在安全模式下运行,但您可以尝试从PHP调用Python脚本。
 <?php
    $my_command = escapeshellcmd('python path/to/python_file.py');
    $command_output = shell_exec($my_command);
    echo $command_output;
 ?>

0

针对 OP 的需求:

但是我想要的是,我应该能够通过我的 Python 脚本打印输入内容。如果我删除 "echo $output" 行,我就得不到任何输出。

应该使用 passthrudescription

<?php

passthru('python /path/to/python_from_php.py input1 input2');

?>

请检查您的 PHP 用户是否有权限运行 Python 和您的 Python 脚本。

演示在这里


0

一种选择是使用passthru(),但如果您不想管理输出缓冲区,并且希望将输出保存在数组中,则可以将输出参数添加到exec命令中,如下所示:

<?php

error_reporting(E_ALL);

$command = escapeshellcmd('/usr/bin/python /path/to/python_from_php.py arg1 arg2');

exec($command, $output);

for ($l=0; $l < count($output); ++$l) {
    echo $output[$l]."\n";
};

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接