HTML
这是一个接受用户输入(url)的表单:
Go
PHP(Laravel)
此控制器将用户输入(url)的值存储到变量中,以便在python脚本中使用。
$url = Input::get('url');
$name = shell_exec('path/to/python ' . base_path() . '/test.py ' . $url);
return $name;
Python
脚本传递用户输入的内容并在正斜杠后显示文本并显示它。
url = sys.argv[1]
name = url.split('/')[-1]
print(name)
回到PHP,它返回Python脚本中执行的值。如果用户输入url:http://example.com/file.png,它将成功返回字符串file.png
关于这一切的一切都有效,但我意识到我限制自己,因为shell_exec命令只会粘贴从python脚本返回的字符串。如果我想要返回多个变量,我该怎么办?
有问题的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?
注意:我知道这些示例中的安全漏洞/注入,这些是我的实际代码的精简版本。
对你提出的问题并不完全是一个答案,但如果这是一个复杂性较小的项目,我建议使用数据库来处理各个进程之间的通信。如果一台机器都在一台机器上,那么SQLite的开销非常小,可以创造奇迹。
@KalZekdor你能详细说明你的意思吗? db存储什么?
取决于您的特定应用。例如,如果用户通过php上传需要由python使用的图像,而不是将路径作为python arg传递给图像,则存储图像(路径或数据),上传者,上传日期,作业状态然后,python脚本可以在db中运行未处理的作业并对它们进行操作。
正如我所说,这并不是你所要求的答案,但值得研究(除非这是一个快速的一次性脚本,在这种情况下它有点矫枉过正)。您可以以更健壮的方式构建应用程序。通过命令行参数来回传递数据是一种快速而肮脏的解决方案;易于实施,但容易破损,维护噩梦。
您可以返回一个数组,但要确保元素不包含分隔符。
喜欢print(','.join(name, test))。
或者您可以像json.dumps([name, test])一样编码为json,然后在PHP中解析json。 当然,第二个更好。
我投了票,因为我错过了JSON !! 我每天都在使用它。 对我感到羞耻:D
@HalayemAnis对你感到羞耻:D
在这种情况下,您的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] . '
';
}