使用PHP变量执行Python脚本

使用PHP变量执行Python脚本,php,python,forms,variables,python-2.7,Php,Python,Forms,Variables,Python 2.7,我正在编写一个简单的应用程序,它使用表单中的信息,通过$\u POST将其传递给一个PHP脚本,该脚本执行python脚本并输出结果。我遇到的问题是,我的python脚本实际上没有在传入参数的情况下运行 process3.php文件: <?php $start_word = $_POST['start']; $end_word = $_POST['end']; echo "Start word: ". $start_word . "<br />";

我正在编写一个简单的应用程序,它使用表单中的信息,通过$\u POST将其传递给一个PHP脚本,该脚本执行python脚本并输出结果。我遇到的问题是,我的python脚本实际上没有在传入参数的情况下运行

process3.php文件:

<?php
     $start_word = $_POST['start'];
     $end_word = $_POST['end'];
     echo "Start word: ". $start_word . "<br />";
     echo "End word: ". $end_word . "<br />";
     echo "Results from wordgame.py...";
     echo "</br>";
     $output = passthru('python wordgame2.py $start_word $end_word');
     echo $output;
?>
在wordgame2.py的顶部,我有以下内容(用于调试目的):

为什么传递的参数数不等于3? (是的,我的表格确实正确发送了数据。)

非常感谢您的帮助

编辑:我可能会补充说,当我明确告诉它开始和结束词时,它确实会运行。。。大概是这样的:

$output = passthru('python wordgame2.py cat dog');
echo $output

更新-

现在我了解了PHP,错误在于使用单引号
。在PHP中,单引号字符串被视为文本,PHP不计算其中的内容。但是,双引号的
字符串是经过计算的,可以按照您的期望工作。这在中进行了漂亮的总结。在我们的例子中

$output = passthru("python wordgame2.py $start_word $end_word");
可以,但下面的方法不行-

$output = passthru('python wordgame2.py $start_word $end_word');
原始答案-

我认为错误在于

$output = passthru("python wordgame2.py $start_word $end_word");
试试这个

$output = passthru("python wordgame2.py ".$start_word." ".$end_word);

感谢您的贡献。我已经用这个简单的解决方案解决了我的问题:

$command = 'python wordgame2.py ' . $start_word . ' ' . $end_word;
$output = passthru($command);

为了让passthru正确处理php变量,需要在执行之前将其连接到字符串中。

如果我理解您想要传递大量类似文本的内容,那么正确的方法是


$output=passthru(“python wordgame2.py”.json\u encode($end\u word)。”“.json\u encode($start\u word))

在php文件中回显“PythonWordGame2.py$start\u word$end\u word”时,您会看到什么?添加该行后,它现在输出:start word:dog end word:cat Results from wordgame.py…PythonWordGame2.py dog cat参数数:1个参数。参数列表:['wordgame2.py']我认为错误在于
$output=passthru('python-wordgame2.py$start\u-word$end\u-word');
试试这个
$output=passthru('python-wordgame2.py.$start\u-word.'$end\u-word);
可能是python因为$keyword拒绝了参数(也可能是$调用shell进行变量替换)请接受他的回答,而不是发布你的答案,这是ashish的答案。我在看到他的答案之前就发布了。请看时间戳。事实上,我在7秒前回答:)否决票是不必要的/未经验证的。显而易见的解决方案不是使用“代替”吗?当“执行变量插值”时,不需要连接。嗯……我对php不太熟悉(一点也不熟悉),所以我的答案只是从我认为开始的……而且,在连接时对传入的两个参数使用
escapeshellarg()
可能很好。
$output = passthru("python wordgame2.py ".$start_word." ".$end_word);
$command = 'python wordgame2.py ' . $start_word . ' ' . $end_word;
$output = passthru($command);