在我機器上的本地Apache安裝程序上運行,並在Laravel外使用python。在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-test^\ printer.pySuccess。這裏是 的返回值:此消息來自python腳本.1
python腳本在通過python shell或命令行運行時很好。在這裏,必須運行該腳本,因爲它具有正確的print
消息。但是,exec
返回值是一個1
,這是失敗。
由於沒有文件'pyfyle.txt'的存在而確認失敗。
我做錯了什麼,以及它如何被修復? 真正的應用程序將會涉及更多,但必須確保我可以先操作基本的腳本調用。
的Laravel命令類:
printIt.php
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腳本:
printer.py
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..")
python腳本有什麼特權? Php以web用戶身份運行exec而不是root用戶。 –
@Björn,很好的電話! 'ls -al'顯示我'-rw-r - r-- 1 Naltroc 197121 150 Jul 1 18:55 printer.py'。所以這意味着所有者:讀寫,組:讀,其他:讀內存服務。一般來說,設定他人執行是否安全?該腳本只能通過控制器或命令接口調用,因此看起來很安全。 。 。 – Naltroc