私のマシン上でローカルApacheの設定で動作し、私はLaravelの外でpythonを使用します。LaravelでPythonスクリプトを実行すると、スクリプトは実行されますが、完全に実行されませんか?
Laravel 5.4を使用して、コマンドを作成して登録しました。私はそれをphp artisan python:printIt
を使ってうまく呼び出すことができます。
コマンドの実行に成功しました。 。 。ファイルは書き込みではありません!コンソールメッセージは次のとおりです。
$ php artisan python:printIt in printItのためのコマンドハンドルです。 Running コマンドコマンドは:C:¥Users¥Cortland¥Miniconda3¥python.exe C:¥¥wamp64¥¥www¥cmrd¥¥cgi-bin¥¥py-test¥¥printer.pySuccessです。ここでは 戻り値です:このメッセージは、Pythonスクリプトから来ました。
pythonスクリプトは、pythonシェルまたはコマンドラインを実行しても問題ありません。ここには、正しい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はrootではなくWebユーザーとしてexecを実行します。 –
@Björn、よろしく! 'ls -al'は私に' -rw-r-r-- 1 Naltroc 197121 150 Jul 1 18:55 printer.py'を表示します。それは所有者を意味します:読み書き、グループ:読み込み、その他:メモリが使用されている場合に読み込みます。一般に、実行するように他の人を設定するのは安全ですか?このスクリプトは、コントローラまたはコマンドインターフェイスからのみ呼び出すことができるため、安全です。 。 。 – Naltroc