如何将变量从PHP传递到Python并返回?

问题描述

我有一个PHP文件一个Python文件PHP文件

<?PHP
echo shell_exec("python wamp64/www/PHP Test/TestPython.py 'param1' 'param2'")
?>

Python文件

import sys

x = sys.argv[1]
y = sys.argv[2]

print (x)
print (y)

当我运行PHP文件时,它没有显示X和Y。这些文件位于同一文件夹中,而我已经尝试过仅输入文件名而不是完整文件夹,但这也不起作用。有谁知道为什么它不起作用? 我正在将WAMP用于PHP和Python 3.9.0。

解决方法

我不确定您是否还需要回答您的问题,但是在我的本地 Windows 计算机上到处尝试了一些东西后,我认为问题可能归结为您的 PHP 文件中的部分是目录名中的空格。特别是“PHP 测试”部分。在 Windows 中,根据过去的经验和之前的检查,当文件夹名称中有空格时,您需要以某种方式在文件夹名称周围添加某种引号(我喜欢在整个文件周围加上双引号路径,如果需要这样做)。

因此,根据我在本地计算机上尝试的示例,如果您要将 PHP 文件更改为类似于以下内容:

<?php
echo shell_exec('python "wamp64/www/PHP Test/TestPython.py" "param1" "param2"')
?>

它可能会按预期工作。我改变了使用的引号类型,外引号是单引号,内引号是双引号。

当我运行这样的示例时(注意:“用户名”替换了实际用户名):

<?php
echo shell_exec('python "C:\Users\username\Documents\Space Text\TestPython.py" "param1" "param2"')
?>

我得到这个结果(注意:“用户名”替换了实际用户名):

PS C:\Users\username\Downloads\php-7.4.15-nts-Win32-vc15-x64> .\php.exe C:\Users\username\Documents\"Space Text"\test.php
param1
param2

如果这仍然不起作用,我会确保您在 PHP 代码中使用 TestPython.py 文件的完整路径。要在 Windows 中查找完整路径,我通常会尝试使用 Windows 文件资源管理器查找有问题的文件(这次是 TestPython.py)。找到该文件后,如果单击 Windows 文件资源管理器标题的文件路径部分,它应该将路径缩减为一行文本,可以将其复制并粘贴到 PHP 文件中。您可能还需要在此复制/粘贴行的末尾添加最后的 TestPython.py 部分。

File Explorer Window

另外,据我所知,我还没有使用过 WAMP,所以我不知道你的 PHP 代码中的文件路径到 TestPython.py 文件是否需要在 { 前面有任何东西{1}} 部分。例如,wamp64 目录是否位于 wamp64 目录中的某个位置?如果是这样,您可能需要在 C:\ 部分之前添加文件路径(如果有);也许像wamp64这样的东西。不过,这部分可能不是必需的,但想将其添加为注释。

,

这是一个简单的解决方案。假设你的目录是 C:\Users\username\Desktop\XAMPP\htdocs\Project

Project
 |__ python_filename.py
 |__ php_filename.php

python_filename.py

import sys

x = sys.argv[1]
y = sys.argv[2]
print(x,y)

php_filename.php 文件

<?php
echo shell_exec("python /Users/username/Desktop/XAMPP/htdocs/Project/python_filename.py param1 param2")
?>

输出

param1 param2