从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
却给我返回了一个错误的值。如果我手动在 script2.py
中直接设置 $output1[0]
的值,它能给我正确的结果,所以问题不在于脚本本身。
我已经用 echo var_dump($output1);
检查过了,结果显示 $output1[0]
是正确的,所以问题也不在于 $output1
传过来的值。
有没有什么线索呢?
编辑1:$output1[0]
的值是一个带空格的字符串("Green Day")。
编辑2:看起来它只传递了单词 "Green"。当我传递一个带空格的字符串时,只有第一个单词被传递。这不太合理,因为我用逗号分隔,而当我输出 $output1
时,它显示的字符串是正确的,包含了空格。
1 个回答
3
我解决了这个问题,所以在这里分享一下,以防有人遇到同样的问题。
这个函数 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]
时,它只会得到 "Green",因为 "Day" 会被当作第二个参数。
所以你只需要在 Python 中遍历你的 sys.argv
,然后把字符串连接起来,像这样:
string = ''
for word in sys.argv[1:]:
string += word + ' '