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

1 投票
1 回答
3212 浏览
提问于 2025-04-18 03:33

我在用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 + ' '

撰写回答