我正在从我的 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
返回了错误的值。直接在 script2.py
上手动设置 $output1[0]
的值会给我一个正确的值,因此问题不在于脚本。
我已经做了一个 echo var_dump($output1);
并且它给了我一个正确的 $output1[0]
,所以问题既不是来自 $output1
.
有什么线索吗?
Edit1:$output1[0]
的值是一个带有空格的字符串(“Green Day”)。
Edit2:似乎只传递了“Green”这个词。当我传递带有空格的字符串时,仅传递第一个单词。这是没有意义的,因为我用 ',' 进行爆炸,当我回显 $output1
时,它会向我显示包含空格的正确字符串。
最佳答案
我设法解决了这个问题,所以我会在这里回答,以防有人遇到同样的问题。
函数 shell_exec
的工作原理如下:
$var = shell_exec('python path/to/your/python/script.py '.$var1.' '.$var2. ...);
您想要传递给 python 脚本的参数必须用空格分隔,这就是 python 解释您发送的多变量的方式。
字符串“Green Day”内部有一个空格,所以就像发送一样
$var = shell_exec('python path/to/your/python/script.py Green Day');
因此,当我在 Python 中执行 sys.argv[1]
时,它只会得到“绿色”,因为“Day”将是“第二个”参数。
因此,只需在 Python 中循环遍历 sys.argv
并连接字符串,如下所示:
string = ''
for word in sys.argv[1:]:
string += word + ' '
关于php - 从 PHP 到 Python 发送/接收字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23190090/