从PHP发送/接收字符串到Python

时间:2014-04-21 02:51:48

标签: php python

我从PHP代码运行了两个Python脚本。要将值发送到我正在执行的脚本:

$output1 = shell_exec('python /path/to/my/script1.py '.$name);
$output1 = explode(',', $output1);

然后我正在做:

$output2 = shell_exec('python /path/to/my/script2.py '.$output1[0]);
$output2 = explode(',', $output2);

$output1正确接收python脚本的返回,但script2.py返回错误的值。直接在$output1[0]上手动设置script2.py的值会给我一个正确的值,因此问题不在于脚本。

我已经做了echo var_dump($output1);并且它给了我一个正确的$output1[0],所以问题不在于来自$output1的价值。

任何线索?

Edit1:$output1[0]的值是一个带有空格的字符串(" Green Day")。

Edit2:似乎只传递了#34; Green"这个词。当我传递一个有空格的字符串时,只传递第一个单词。这是没有意义的,因为我正在爆炸,','当我回显$output1时,它会显示包含空格的正确字符串。

1 个答案:

答案 0 :(得分:1)

我设法解决了这个问题所以我会在这里回答,以防有人遇到同样的问题。

函数shell_exec的工作原理如下:

$var = shell_exec('python path/to/your/python/script.py '.$var1.' '.$var2. ...);

你想传递给python脚本的参数必须用空格分隔,这就是python如何解释你发送的多变量。

字符串"绿日"其中有一个空白区域,所以就像发送

一样
$var = shell_exec('python path/to/your/python/script.py Green Day');

因此,当我在Python中执行sys.argv[1]时,它只能获得" Green"因为" Day"将是"第二"参数。

所以只需在Python中循环你的sys.argv并连接这样的字符串:

string = ''
for word in sys.argv[1:]:
    string += word + ' '