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".