在我的机器上运行本地Apache设置,我在Laravel之外使用python。
使用Laravel 5.4,我已经制作并注册了该命令。我可以使用php artisan python:printIt
调用它。
我在运行命令方面取得了成功。 。 。但文件没有写!这是控制台消息:
$ php artisan python:printIt在printIt的命令句柄中。运行 命令。命令是:C:\ Users \ Cortland \ Miniconda3 \ python.exe C:^ \ wamp64 ^ \ WWW ^ \ cmrd ^ \ cgi-bin目录^ \ PY-测试^ \ printer.pySuccess。这是 返回值:此消息来自python脚本.1
当通过python shell或命令行运行时,python脚本很好。在这里,必须运行脚本,因为它具有正确的print
消息。但是,exec
返回值为1
,这是失败的。
确认失败,因为没有文件'pyfyle.txt'存在。
我做错了什么,怎么修好? 真正的应用程序将更多涉及,但必须确保我可以首先操作基本脚本调用。
Laravel命令类:
class printIt extends Command
{
protected $signature = 'python:printIt';
protected $description = 'Run the test python command.';
public function __construct()
{
parent::__construct();
}
public function handle()
{
echo "In command handle for printIt.\n";
exec("where python", $path);
$cmd = base_path('cgi-bin\py-test\printer.py');
// "path/to/python command"
$run = $path[0] . ' ' . escapeshellcmd($cmd);
try {
echo "Running command.\n";
echo "Command is : " . $run;
$res = exec($run, $out, $res);
if ($res == 1) {
throw \Exception("Could not run the sript");
} else {
echo "Success. Here is the return value: ", print_r($res);
}
} catch (\Exception $e) {
echo "Error running command. It says " . $e->getMessage();
}
}
}
python脚本:
with open('pyfyle.txt', 'w', encoding='utf-8') as f:
f.write('new text here.')
f.close
// Edit: error, incorrect call to close: change f.close to f.close()
print("This message came from the python script..")
答案 0 :(得分:1)
在控制台中输入:
sudo chmod +x printer.py
授予Python脚本执行权限。
这适用于Linux发行版,但看到你有" C:\"在您的输出中,这意味着您正在运行Windows。
在哪种情况下:
您需要将.py添加到PATHEXT环境变量中。
根据:https://docs.python.org/3/faq/windows.html#how-do-i-make-python-scripts-executable
答案 1 :(得分:0)
问题是我对服务器运行的python版本做了一个假设。
在家里我使用Python 3.6。如果我刚开始在服务器上运行python -V
,我就会避免数小时的混乱和挫折。
服务器在Python 2.6上运行,其中文件操作不同。 kwarg encoding
无效,这足以打破程序。
另外,我应该打印$res
以查看错误消息。
故事的道德:
始终检查软件和软件包版本。
始终找到显示错误的方法。