de-vraag
  • Pertanyaan
  • Tag
  • Pengguna
Notifikasi
Imbalan
Registrasi
Setelah Anda mendaftar, Anda akan diberitahu tentang balasan dan komentar untuk pertanyaan Anda.
Gabung
Jika Anda sudah memiliki akun, masuk untuk memeriksa pemberitahuan baru.
Akan ada hadiah untuk pertanyaan, jawaban, dan komentar tambahan.
Lebih
Sumber
Sunting
Abandoned account
Abandoned account
Question

Menjalankan Python script dari PHP

I'm mencoba untuk menjalankan Python script dari PHP menggunakan perintah berikut:

exec('/usr/bin/python2.7 /srv/http/assets/py/switch.py arg1 arg2');

Namun, PHP hanya doesn't menghasilkan output apapun. Kesalahan pelaporan diatur ke E_ALL dan display_errors di.

Berikut ini's apa yang saya've mencoba:

  • Saya menggunakan python2, /usr/bin/python2 dan python2.7 bukan /usr/bin/python2.7
  • Saya juga menggunakan path relatif bukannya absolut yang tidak't perubahan apa-apa baik.
  • Saya mencoba menggunakan perintah exec, shell_exec, sistem.

Namun, jika saya menjalankan

if (exec('echo TEST') == 'TEST')
{
    echo 'exec works!';
}

ini bekerja baik-baik saja saat shutdown sekarang doesn't melakukan apa-apa.

PHP memiliki izin untuk mengakses dan mengeksekusi file.

EDIT: Terima kasih untuk Alejandro, saya bisa memperbaiki masalah. Jika anda memiliki masalah yang sama, don't lupa bahwa server web anda mungkin/mudah-mudahan doesn't dijalankan sebagai root. Coba log in sebagai webserver anda's user atau pengguna dengan izin mirip dan mencoba untuk menjalankan perintah sendiri.

103 2013-11-01T20:54:21+00:00 8
fifi finance
fifi finance
Pertanyaan edit 23 September 2015 в 2:46
Pemrograman
archlinux
python
linux
php
exec
Solution / Answer
Alejandro Quiroz
Alejandro Quiroz
1 November 2013 в 10:34
2013-11-01T22:34:58+00:00
Lebih
Sumber
Sunting
#22691875

Diuji pada Ubuntu Server 10.04. Saya berharap hal ini membantu anda juga di Arch Linux.

Di PHP gunakan fungsi shell_exec:

Jalankan perintah melalui shell dan kembali menyelesaikan output string.

Itu kembali output dari eksekusi perintah atau NULL jika kesalahan terjadi atau perintah tidak menghasilkan output.

<?php 

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

?>

Di Python file test.py, memverifikasi teks ini di baris pertama: (lihat shebang menjelaskan):

#!/usr/bin/env python

Juga file Python harus benar-hak istimewa (eksekusi untuk user www-data / apache jika skrip PHP berjalan di browser atau keriting) dan/atau harus "eksekusi". Juga semua perintah ke dalam .py file harus benar-hak:

Diambil dari php manual:

Hanya pengingat bagi orang yang mencoba untuk menggunakan shell_exec di unix-jenis platform dan dapat't tampaknya untuk mendapatkan itu untuk bekerja. PHP dijalankan sebagai web user pada sistem (umumnya www Apache), sehingga anda perlu untuk pastikan bahwa pengguna web memiliki hak untuk apapun file atau direktori yang anda mencoba untuk menggunakan di shell_exec perintah. Lainnya bijaksana, itu tidak't muncul untuk melakukan apa-apa.

Untuk membuat executable file pada unix-jenis platform:

chmod +x myscript.py
Alejandro Quiroz
Alejandro Quiroz
Jawaban edit 2 Mei 2019 в 5:14
141
0
Niklas Lindblad
Niklas Lindblad
1 November 2013 в 10:38
2013-11-01T22:38:27+00:00
Lebih
Sumber
Sunting
#22691876

Saya sarankan menggunakan passthru dan penanganan output buffer langsung:

ob_start();
passthru('/usr/bin/python2.7 /srv/http/assets/py/switch.py arg1 arg2');
$output = ob_get_clean(); 
21
0
fifi finance
fifi finance
18 September 2015 в 6:19
2015-09-18T18:19:01+00:00
Lebih
Sumber
Sunting
#22691878

Jika anda ingin tahu status kembali perintah dan mendapatkan seluruh stdout output anda bisa benar-benar menggunakan exec:

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

$out adalah array dari semua lini. $status adalah kembalinya status. Sangat berguna untuk debugging.

Jika anda juga ingin melihat stderr output anda dapat bermain dengan proc_open atau hanya menambahkan 2>&1 ke $perintah. Yang terakhir ini sering cukup untuk mendapatkan sesuatu yang bekerja dan cara yang lebih cepat untuk "menerapkan".

fifi finance
fifi finance
Jawaban edit 19 September 2015 в 8:05
14
0
Colin Miles
Colin Miles
27 Juli 2014 в 10:19
2014-07-27T22:19:04+00:00
Lebih
Sumber
Sunting
#22691877

Alejandro dipaku itu, menambahkan klarifikasi dengan pengecualian (Ubuntu atau Debian) - I don't memiliki rep untuk menambah menjawab sendiri:

file sudoers: sudo visudo

pengecualian menambahkan: www-data ALL=(ALL) NOPASSWD: ALL

9
0
Agnel Vishal
Agnel Vishal
7 Oktober 2018 в 3:59
2018-10-07T15:59:18+00:00
Lebih
Sumber
Sunting
#22691883

Untuk memperjelas perintah yang digunakan berdasarkan situasi

exec () Mengeksekusi program eksternal

sistem () Mengeksekusi program eksternal dan menampilkan output

passthru () Mengeksekusi program eksternal dan menampilkan output baku

Sumber: http://php.net/manual/en/function.exec.php

Agnel Vishal
Agnel Vishal
Jawaban edit 11 Oktober 2018 в 7:23
PHP: exec - Manual
php.net
5
0
Tim Hallman
Tim Hallman
2 Maret 2018 в 5:43
2018-03-02T17:43:47+00:00
Lebih
Sumber
Sunting
#22691879

Dalam kasus saya saya perlu untuk membuat sebuah folder baru di www direktori yang disebut script. Dalam script saya menambahkan file baru yang disebut test.py.

Saya kemudian digunakan sudo chown www-data:akar script dan sudo chown www-data:root test.py.

Kemudian saya pergi ke new script direktori dan digunakan sudo chmod +x test.py.

Saya test.py file ini akan terlihat seperti ini. Catatan yang berbeda Python versi:

#!/usr/bin/env python3.5
print("Hello World!")

Dari php yang saya lakukan sekarang ini:

$message = exec("/var/www/scripts/test.py 2>&1");
print_r($message);

Dan anda harus melihat: Hello World!

3
0
 Smshrimant
Smshrimant
20 Juni 2018 в 11:08
2018-06-20T11:08:19+00:00
Lebih
Sumber
Sunting
#22691881

Metode di atas tampaknya menjadi kompleks. Menggunakan metode saya sebagai referensi.

Aku memiliki dua file:

  • run.php

  • mkdir.py

Di sini, saya've dibuat sebuah halaman HTML yang berisi PERGI tombol. Setiap kali anda menekan tombol ini sebuah folder baru akan dibuat di direktori dan path telah anda sebutkan.

run.php

<html>
 <body>
  <head>
   <title>
     run
   </title>
  </head>

   <form method="post">

    <input type="submit" value="GO" name="GO">
   </form>
 </body>
</html>

<?php
    if(isset($_POST['GO']))
    {
        shell_exec("python /var/www/html/lab/mkdir.py");
        echo"success";
    }
?>

mkdir.py

#!/usr/bin/env python    
import os    
os.makedirs("thisfolder");
Ronan Boiteau
Ronan Boiteau
Jawaban edit 19 November 2018 в 9:39
2
0
Gerald Joshua
Gerald Joshua
29 Mei 2018 в 5:37
2018-05-29T17:37:41+00:00
Lebih
Sumber
Sunting
#22691880

Ini sangat sepele, tetapi hanya ingin membantu siapa saja yang sudah diikuti bersama Alejandro's saran, tetapi mengalami kesalahan ini:

sh: blabla.py: perintah tidak ditemukan

Jika ada yang mengalami kesalahan itu, kemudian sedikit perubahan yang perlu dibuat untuk file php dengan Alejandro:

$command = escapeshellcmd('python blabla.py');
Gerald Joshua
Gerald Joshua
Jawaban edit 29 Mei 2019 в 4:34
1
0
Related communities 15
Python Indonesia
Python Indonesia
24 686 pengguna
Programmer Python Indonesia. Group ini dikelola oleh sejumlah admin. Baca pesan tersemat / pinned message: https://t.me/pythonID/217588
Buka telegram
Telegram Bot PHP - Indonesia
Telegram Bot PHP - Indonesia
11 192 pengguna
Pengen tau ada bot apa aja? Cek @botkoleksi Grup diskusi tentang pembuatan bot telegram menggunakan bahasa pemrograman PHP. Bahasa Lain, Tetap welcome. Diskusi bot lainnya @botIndonesia Ngobrol bebas di @indonesiabicara
Buka telegram
Belajar GNU/Linux Indonesia
Belajar GNU/Linux Indonesia
7 144 pengguna
Komunitas GNU/Linux Indonesia di Telegram, baca peraturan group di: telegra.ph/Peraturan-BGLI-03-07 Member baru perlu membalas kode verifikasi, jika tidak terverifikasi dalam 5 menit maka pesan akan terhapus dan akan dikeluarkan dari group untuk menguran
Buka telegram
PHP Indonesia Community
PHP Indonesia Community
3 207 pengguna
Grup telegram yang membahas secara khusus seputar progamming php. Sarana untuk saling berkomunikasi, berbagi tips dan trik, tutorial, loker serta tanya jawab.
Buka telegram
Arch Linux Indonesia 🇮🇩
Arch Linux Indonesia 🇮🇩
1 570 pengguna
Komunitas Arch Linux Indonesia 🇮🇩 Baca, patuhi Rules/Peraturan grup https://telegra.ph/Rules-Arch-Linux-Indonesia-06-04 Out Off Topic @LinuxID_OOT ID: -1001050564567
Buka telegram
Indonesian Python Warriors
Indonesian Python Warriors
1 462 pengguna
Di grup ini tidak ada kewajiban untuk menggunakan username dan foto. Yang tidak boleh adalah spamming. Gak boleh baper, kalau nanya yang bener, eror jangan difoto pake HP, gunakan screenshot, code copas ke pastebin.com lalu share link ke sini.
Buka telegram
Tambahkan pertanyaan
Kategori
Semua
Teknologi
Budaya / Rekreasi
Kehidupan / Seni
Ilmu Pengetahuan
Profesional
Bisnis
Pengguna
Semua
Baru
Populer
1
Asilbek Qadamboyev
Terdaftar 1 hari yang lalu
2
Akshit Mehta
Terdaftar 4 hari yang lalu
3
me you
Terdaftar 1 minggu yang lalu
4
Никита иванов
Terdaftar 1 minggu yang lalu
5
Alex1976G_06
Terdaftar 1 minggu yang lalu
DE
EL
ES
FR
ID
IT
JA
PT
RU
TR
ZH
© de-vraag 2022
Sumber
stackoverflow.com
di bawah lisensi cc by-sa 3.0 dengan atribusi