GNU/Linux >> Belajar Linux >  >> Linux

Menjalankan skrip Python dari PHP

Saya sarankan menggunakan passthru dan menangani buffer keluaran secara langsung:

ob_start();
passthru('/usr/bin/python2.7 /srv/http/assets/py/switch.py arg1 arg2');
$output = ob_get_clean(); 

Diuji pada Ubuntu Server 10.04. Saya harap ini juga membantu Anda di Arch Linux.

Dalam PHP gunakan fungsi shell_exec:

Jalankan perintah melalui shell dan kembalikan keluaran lengkap sebagai string.

Ini mengembalikan output dari perintah yang dieksekusi atau NULL jika terjadi kesalahan atau perintah tidak menghasilkan output.

<?php 

$command = escapeshellcmd('/usr/custom/test.py');
$output = shell_exec($command);
echo $output;

?>

Ke dalam file Python test.py , verifikasi teks ini di baris pertama:(lihat penjelasan shebang):

#!/usr/bin/env python

Jika Anda memiliki beberapa versi Python terinstal, /usr/bin/env akan memastikan bahwa juru bahasa yang digunakan adalah yang pertama di $PATH lingkungan Anda. Alternatifnya adalah dengan meng-hardcode sesuatu seperti#!/usr/bin/python; tidak apa-apa, tapi kurang fleksibel.

Di Unix, file yang dapat dieksekusi yang dimaksudkan untuk ditafsirkan dapat menunjukkan juru bahasa apa yang digunakan dengan memiliki #! di awal baris pertama, diikuti oleh juru bahasa (dan tanda apa pun yang mungkin diperlukan).

Jika Anda berbicara tentang platform lain, tentu saja, aturan ini tidak berlaku (tetapi "garis shebang" itu tidak membahayakan, dan akan membantu jika Anda pernah menyalin skrip itu ke platform dengan basis Unix, seperti Linux, Mac, dll. ).

Ini berlaku ketika Anda menjalankannya di Unix dengan membuatnya dapat dieksekusi(chmod +x myscript.py) dan kemudian menjalankannya secara langsung:./myscript.py, bukan hanya python myscript.py

Untuk membuat file yang dapat dieksekusi pada platform tipe unix:

chmod +x myscript.py

File Python juga harus memiliki hak istimewa yang benar (eksekusi untuk pengguna www-data/apache jika skrip PHP berjalan di browser atau curl) dan/atau harus "dapat dieksekusi". Juga semua perintah ke dalam .py file harus memiliki hak istimewa yang benar.

Diambil dari manual php:

Sekadar pengingat singkat bagi mereka yang mencoba menggunakan shell_exec pada platform tipe aunix dan sepertinya tidak dapat membuatnya berfungsi. PHP dijalankan sebagai pengguna web pada sistem (umumnya www untuk Apache), jadi Anda perlu memastikan bahwa pengguna web memiliki hak atas file atau direktori apa pun yang Anda coba gunakan dalam perintah shell_exec. melakukan apa saja.


Jika Anda ingin mengetahui status pengembalian perintah dan mendapatkan seluruh stdout hasil yang Anda bisa sebenarnya menggunakan exec :

$command = 'ls';
exec($command, $out, $status);

$out adalah array dari semua baris. $status adalah status kembali. Sangat berguna untuk proses debug.

Jika Anda juga ingin melihat stderr keluaran Anda dapat bermain dengan proc_open atau cukup menambahkan 2>&1 ke $command Anda . Yang terakhir seringkali cukup untuk membuat sesuatu bekerja dan jauh lebih cepat untuk "diimplementasikan".


Linux
  1. Skrip PHP - mendeteksi apakah berjalan di bawah linux atau Windows?

  2. Menjalankan skrip PHP dari baris perintah sebagai proses latar belakang

  3. Pengaturan pekerjaan cron Godaddy untuk menjalankan skrip php

  1. Cara mengunduh File dari server SFTP Menggunakan skrip python

  2. Menjalankan perintah linux dari python

  3. Menjalankan Pycharm sebagai root dari launcher

  1. Cara menjalankan skrip Python dari shell

  2. Cara menguji skrip PHP

  3. menjalankan skrip php (fungsi php) di linux bash