WordPress'te Python Komut Dosyaları Nasıl Çalıştırılır?

Yayınlanan: 2023-08-03

Python, kullanım kolaylığı, güçlü kitaplıkları ve basit sözdizimi nedeniyle popülaritesini artırmaya devam ediyor. Sık sık kendimi PHP'ye dönüştürmeden önce Python ile WordPress için bireysel işlevlerin prototipini yaparken buluyorum.

Ancak bunu yapmak yerine neden Python'u WordPress'te çalıştırmıyorsunuz? Bu yazıda, Python kodunu doğrudan bir WordPress web sitesinde çalıştırmak için kullanılabilecek çeşitli yöntemleri tartışacağız.

WordPress'te Python Komut Dosyalarını Çalıştırın

Python dahil olmak üzere harici betikleri çalıştırmak için exec() adlı yerleşik bir PHP işlevini kullanabiliriz. Bu, çalışmak için hem PHP hem de Python'da biraz kod gerektirecektir, ancak her şeyin nasıl birbirine uyduğunu anladığınızda oldukça kolaydır.

david-clode-ojlt2xbwuws-unsplash-1

Bir eklenti veya bir kod parçacığı oluşturabiliriz. Ne oluşturmak istediğinize bağlıdır, ancak ben genellikle web sitesinin ön yüzünde yönetimi daha kolay olan bir kod parçacığı oluştururum.

Öncelikle Python'un sunucunuzda global olarak kurulu olduğundan emin olun. Kök erişiminiz varsa kendiniz yapabilirsiniz, yoksa web barındırıcınızdan yüklemesini istemeniz gerekir. Örneğin, Cloudways'te bizim için Python'u yüklemelerini sağlamamız gerekiyordu.

PHP İşlevi

WordPress'te herhangi bir Python betiğini çalıştıracak bir PHP işlevi yapmak için kod oluşturacağız. Kullanım kolaylığı için önce size bir Code Snippet Management eklentisi ile kullanılabilecek bir snippet göstereceğim. Ardından, aynı şeyi yapmak için özel bir eklenti oluşturmaya göz atabiliriz.

Bu işlevle, tüm Python betikleri medya kitaplığında yaşar ve medya kitaplığı öğe kimliğini belirterek çalıştırılacak betiği seçebiliriz. Muhtemelen Python mime türünün yüklenmesine izin vermeniz gerekeceğini unutmayın. Bunu etkinleştirmek için bu eklentiyi kullandım.

Bu biraz karmaşık görünüyor çünkü çok fazla hata işleme ekledim. Ancak özünde, kodun yaptığı tek şey, dosyayı medya kitaplığından bulmak ve betiği çalıştırmak, sonunda ne olursa olsun çıktısını almaktır.

Makinemde yüklü olan 'python3' kullandığımı lütfen unutmayın. Bunu 'python' olarak değiştirmek isteyebilirsiniz.

<?php function cwpai_run_python_script($media_id) { // Sunucudaki medya dosyası yolunu alın $media_path = get_attached_file($media_id); // Ortam dosyasının var olup olmadığını kontrol edin if ($media_path) { // Python komutunu $python_command = 'python3' olarak ayarlayın. escapeshellarg($media_path); // Python betiğini çalıştırın ve çıktıyı yakalayın exec($python_command, $output, $return_status); if ($return_status === 0) { // Komut dosyası başarıyla yürütüldü, çıktıyı döndür return implode("\n", $output); } else { // Betik yürütme başarısız oldu, hatayı günlüğe kaydedin ve bir hata mesajı döndürün error_log('Python betiği yürütülürken hata oluştu. Komut: ' . $python_command); return 'Python betiği yürütülürken hata oluştu.'; } } else { // Medya dosyası bulunamadı, hatayı günlüğe kaydedin ve bir hata mesajı döndürün error_log('Medya kimliği için medya dosyası bulunamadı ' . $media_id); return 'Medya dosyası bulunamadı.'; } } // Ortam kimliği 6 olan kullanım örneği $result = cwpai_run_python_script(6); // Sonucun çıktısını alın veya hatayı işleyin if (is_string($result)) { // Sonuç bir string ise, bu bir hata mesajını gösterir echo $result; } else { // Sonuç bir dizi değilse, Python betiğinin çıktısı olmalıdır // Çıktıyı görüntüleyin veya gerekirse başka işlemler gerçekleştirin echo $result; }

Bir eklenti oluşturursak, yapı şöyle görünebilir:

 wp-content/plugins/ cwpai_my-python-plugin/ cwpai_plugin.php assets/ py/ script.py

cwpai_plugin.php şöyle görünür:

<?php /* Eklenti Adı: CWPAI Python Eklentim Açıklama: Medya dosyaları için Python betiklerini çalıştırmak için bir eklenti. Sürüm: 1.0 Yazar: Adınız */ // Eklenti kodu buraya gelecek. function cwpai_run_python_script($file_name) { // Eklenti dizini yolunu alın $plugin_dir = plugin_dir_path(__FILE__); // Python betiği yolunu eklenti dizinine göre ayarlayın $python_script_path = $plugin_dir . 'varlıklar/py/' . $dosya_adı; // Python betik dosyasının var olup olmadığını kontrol edin if (file_exists($python_script_path)) { // Python komutunu $python_command = 'python3' olarak ayarlayın. escapeshellarg($python_script_path); // Python betiğini çalıştırın ve çıktıyı yakalayın exec($python_command, $output, $return_status); if ($return_status === 0) { // Komut dosyası başarıyla yürütüldü, çıktıyı döndür return implode("\n", $output); } else { // Betik yürütme başarısız oldu, hatayı günlüğe kaydedin ve bir hata mesajı döndürün error_log('Python betiği yürütülürken hata oluştu. Komut: ' . $python_command); return 'Python betiği yürütülürken hata oluştu.'; } } else { // Python betik dosyası bulunamadı, hatayı günlüğe kaydedin ve bir hata mesajı döndürün error_log('Python betik dosyası bulunamadı: ' . $python_script_path); return 'Python betik dosyası bulunamadı.'; } }

Eklenti için, Python Komut Dosyalarını belirli bir dizine dahil etmek daha hızlıdır (bu örnekte, bu, asset/py'dir), bu da onları FTP üzerinden eklemenize ve düzenlemenize olanak tanır. Bu nedenle, WordPress'te çalıştıracak çok sayıda Python'unuz varsa daha iyidir.

Kullanmak için işlevi çağırmanız yeterlidir:

// Dosya adı "example.py" olan kullanım örneği $result = cwpai_run_python_script('example.py'); // Sonucun çıktısını alın veya hatayı işleyin if (is_string($result)) { // Sonuç bir string ise, bu bir hata mesajını gösterir echo $result; } else { // Sonuç bir dizi değilse, Python betiğinin çıktısı olmalıdır // Çıktıyı görüntüleyin veya gerekirse başka işlemler gerçekleştirin echo $result; }

Kısa kod

"Üretimde" bir Python betiğini çalıştırmak için bir WP kısa kodu yapmak da yardımcı olabilir. Aynı genel işlevi, bir WordPress kısa koduna dönüştürmek için değiştirerek yukarıdan kullanabiliriz:

function cwpai_run_python_script($atts) { // Kısa kod özniteliklerini ayıklayın $args = shortcode_atts(array('media_id' => '1'), $atts); // Sunucudaki ortam dosyası yolunu alın $media_path = get_attached_file($args['media_id']); // Ortam dosyasının var olup olmadığını kontrol edin if ($media_path) { // Python komutunu $python_command = 'python3' olarak ayarlayın. escapeshellarg($media_path); // Python betiğini çalıştırın ve çıktıyı yakalayın exec($python_command, $output, $return_status); if ($return_status === 0) { // Komut dosyası başarıyla yürütüldü, çıktıyı döndür return implode("\n", $output); } else { // Betik yürütme başarısız oldu, hatayı günlüğe kaydedin ve bir hata mesajı döndürün error_log('Python betiği yürütülürken hata oluştu. Komut: ' . $python_command); return 'Python betiği yürütülürken hata oluştu.'; } } else { // Medya dosyası bulunamadı, hatayı günlüğe kaydedin ve bir hata mesajı döndürün error_log('Medya kimliği için medya dosyası bulunamadı ' . $args['media_id']); return 'Medya dosyası bulunamadı.'; } } add_shortcode('run_python_script', 'cwpai_run_python_script');

Artık [run_python_script media_] kısa kodunu yazılarınızda ve sayfalarınızda doğrudan kullanabilirsiniz. "6"yı kullanmak istediğiniz medya dosyasının kimliği ile değiştirin.

Barındırılan Bir Hizmet Kullanın

Python'a API'ler aracılığıyla erişmenizi sağlayan düzinelerce barındırılan hizmet vardır. Bu, daha karmaşık projeler ve iş akışları için yararlı olabilir, özellikle PHP'deki çıktıya (CURL kullanarak) tıpkı kendi özel eklentinizi oluşturmuş gibi erişebildiğiniz için.

Öncelikle, Python ile bir API oluşturmanız gerekecek. İşte bunun için iyi bir kaynak. API uç noktalarını ortaya çıkaran bir web uygulaması yapmak için esas olarak Flask'ı kullanacaksınız. Ardından, o web uygulamasını bu hizmetlerden biriyle barındıracak ve PHP ile farklı API uç noktalarına erişeceksiniz.

İşte API'ye sahip örnek bir Python Uygulaması:

# api.py şişeden rasgele içe aktarma içe aktarma Şişe, istek, jsonify uygulaması = Şişe(__name__) Things_list = [ "Elma", "Muz", "Havuç", "Köpek", "Fil", "Çiçek", "Gitar" , "House", "Igloo", "Jacket" ] @app.route('/api/data', method=['POST']) def process_data(): data = request.get_json() mesaj = data.get ('mesaj') random_thing = random.choice(things_list) response_data = {'response': f'Alınan mesaj: {message}. Rastgele şey: {random_thing}'}, __name__ == '__main__' ise jsonify(response_data) döndürür: app.run(debug=True)

Ve bu verileri WordPress'te kullanmama izin vererek PHP'de nasıl erişeceğim (veritabanı alanlarını değiştirmek, yeni bir kullanıcı eklemek vb.)

<?php // API bitiş noktası URL'si $apiUrl = 'http://your-python-api-domain.com/api/data'; // Python API'sine gönderilecek veriler $data = array( 'message' => 'Hello from PHP!' ); // Verileri JSON'a dönüştürün $dataJson = json_encode($data); // CURL oturumunu başlat $ch = curl_init(); // CURL seçeneklerini ayarla curl_setopt($ch, CURLOPT_URL, $apiUrl); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $dataJson); curl_setopt($ch, CURLOPT_HTTPHEADER, dizi('İçerik Tipi: uygulama/json')); curl_setopt($ch, CURLOPT_RETURNTRANSFER, doğru); // cURL oturumunu çalıştır ve yanıtı yakala $response = curl_exec($ch);

Şimdi, $response verileriyle, onu herhangi bir WordPress işleviyle kullanabilirsiniz. Bu basit bir örnek, ancak bunu nasıl yapacağınızı göstermek için iyi.

Biraz teknik bilginiz varsa ve ucuz bir şey istiyorsanız Python uygulamanızı, basit şeyler için ayda 2,50 ABD doları olan Digital Ocean kullanarak dağıtmanızı öneririm.

Hızlı, basit ve kolay bir şey istiyorsanız, aylık 5$'dan başlayan PythonAnywhere.com'a göz atın.

Küçük senaryolar dışında, bu yöntem muhtemelen işleri yapmanın en iyi yoludur.

Python'u PHP'ye Dönüştür

Başka bir seçenek de Python'u PHP'ye dönüştürmek ve bu işlevi çalıştırmak için Kod Parçacıkları gibi bir eklenti kullanmak olacaktır.

Bunu manuel olarak PHP'ye dönüştürebilir veya Python'a yapıştırmak için ChatGPT veya CodeWP gibi bir araç kullanabilir ve PHP'ye yeniden yazılmasını isteyebilirsiniz. WordPress içerik oluşturucuları için özel olarak oluşturulmuş bir yapay zeka aracı olan CodeWP ile ilgili bir örneği burada bulabilirsiniz:

lepage-2023-07-24-at-12-45-16

Çözüm

AI ile çalışan bir WordPress geliştiricisi olarak, sık sık kendimi Python ile hızlı bir şekilde bir şeyler uydurmaya, hatta dilde eksiksiz üretim düzeyinde işlevler oluşturmaya ihtiyaç duyarken buluyorum.

Bu yöntemleri izleyerek, bir WordPress sitesinde hızlı bir şekilde python çalıştırabilir ve üretebileceği çıktıya erişebilirsiniz.