这是一个接受用户输入(url)的表单:
<form method="post" action="/" accept-charset="utf-8">
<input type="search" name="url" placeholder="Enter a url" />
<button>Go</button>
</form>
该控制器将用户输入(url)的值存储到变量中,以便在python脚本中使用。
$url = Input::get('url');
$name = shell_exec('path/to/python ' . base_path() . '/test.py ' . $url);
return $name;
脚本传递用户输入的内容,并在正斜杠后显示文本并显示它。
url = sys.argv[1]
name = url.split('/')[-1]
print(name)
回到PHP,它返回Python脚本中执行的值。如果用户输入了网址:http://example.com/file.png
,则会成功返回字符串file.png
关于这一切的一切都有效,但我意识到我限制自己,因为shell_exec
命令只会粘贴从python脚本返回的字符串。如果我想要返回多个变量,我需要做什么?
url = sys.argv[1]
name = url.split('/')[-1]
test = "pass this text too!"
# ? what goes here ?
因此HTML页面现在应该返回file.png
和pass this text too!
我是否需要在python中返回数组或json,然后在PHP中提取数组/ json?
注意:我知道这些示例中的安全漏洞/注入,这些是我的实际代码的精简版本。
答案 0 :(得分:2)
您可以返回一个数组,但请确保元素不包含分隔符。
像print(','.join(name, test))
一样。
或者您可以像json.dumps([name, test])
一样编码为json,然后在PHP中解析json。当然,第二个更好。
答案 1 :(得分:0)
在这种情况下,您的Python脚本必须返回格式化的响应,PHP脚本可以正确解析并使用其值确定变量
例如,你的python代码必须返回类似的内容:
file_name=file.png;file_extension=png;creation_date=1/1/2015;
之后在你的PHP代码中你做了必要的事情
$varValues = explode(";", $PythonResult);
foreach($varValues as $vv) {
$temp = explode("=", $vv);
print 'Parameter : ' . $temp[0] . ' value : ' . $temp[1] . '<br />';
}