使用shell_exec或exec来使用STDIN&STDOUT从命令行通过输入传递来运行python文件

时间:2019-05-11 10:21:26

标签: php

我想使用exec函数从我的php代码运行一个python文件。为此,我使用命令"python test.py",如果我打印“ Hello World”,它将显示出来。

为此,我的php代码如下:

<?php
$Data = exec("python test.py");
echo $Data;
?>

Python代码是:

print("Hello World")

现在,我要向文件传递一个输入值,例如我的名字“ Razin”。这样它将打印"Hello Razin"

这是我的python代码

x = input()
print ("Hello "+x)

应打印Hello Razin。然后从php中捕获它。

我不想传递参数并使用python system来捕捉。我想使其像代码判断系统一样。

我听说了管道,并阅读了。但这并不清楚我的概念。

N.B:如果您还可以描述输入是否多于1个,那将是一个很大的帮助。

1 个答案:

答案 0 :(得分:0)

最后我找到了解决方案。最好的方法是使用proc_open()

代码示例如下。

$descriptorspec = array(
                    0 => array("pipe", "r"), //input pipe
                    1 => array("pipe", "w"), //output pipe
                    2 => array("pipe", "w"), //error pipe
                );
 //calling script with max execution time 15 second
$process = proc_open("timeout 15 python3 $FileName", $descriptorspec, $pipes);
if (is_resource($process)) {
   fwrite($pipes[0], "2"); //sending 2 as input value, for multiple inputs use "2\n3" for input 2 & 3 respectively
   fclose($pipes[0]);
   $stderr_ouput = [];
   if (!feof($pipes[2])) {
   // We're acting like passthru would and displaying errors as they come in.
         $error_line = fgets($pipes[2]);
         $stderr_ouput[] = $error_line;
    }

    if (!feof($pipes[1])) {
             $print = fgets($pipes[1]); //getting output of the script
    }
}

proc_close($process);