ওয়ার্ডপ্রেসের মধ্যে পাইথন স্ক্রিপ্ট চলছে


19

আমার একটি ব্যক্তিগত ব্লগের জন্য একটি ওয়ার্ডপ্রেস ইনস্টল রয়েছে এবং আমি ধীরে ধীরে ব্লগের পৃষ্ঠাগুলিতে কয়েক বছর ধরে লিখেছি এমন সমস্ত ছোট ছোট বিট পোর্ট করছি।

এরকম একটি পৃষ্ঠা হ'ল http://www.projecttoomanycooks.co.uk/cgi-bin/memory/majorAnalysis.py যা একটি সাধারণ পাইথন স্ক্রিপ্ট যা শব্দের একটি তালিকা ফিরিয়ে দেয় - আমি সেই আচরণটি ওয়ার্ডপ্রেস পৃষ্ঠায় অন্তর্ভুক্ত করতে চাই - কেউ কি আমাকে ওয়ার্ডপ্রেসের মধ্যে অজগর স্পট চালানোর সহজ পদ্ধতির জন্য সঠিক দিক নির্দেশ করতে পারে?

সম্পাদনা করুন - নীচে দুর্দান্ত উত্তর অনুসরণ করে, আমি অনেক বেশি এগিয়েছি ... তবে দুর্ভাগ্যক্রমে এখনও এখনও সেখানে নেই ...

আমার অজগর রয়েছে যা সার্ভারে চালিত করে ...

projecttoomanycooks server [~/public_html/joereddington/wp-content/plugins]#./hello.py 
Hello World!

এবং এটি সক্রিয় প্লাগইন হিসাবে একই ডিরেক্টরিতে ...

পাইথন কোড ... এতে নিম্নলিখিত কোড রয়েছে ...

#!/usr/bin/python
print("Hello World!")

পিএইচপি:

<?php
/**
 * Plugin Name: Joe's python thing.
 * Plugin URI: http://URI_Of_Page_Describing_Plugin_and_Updates
 * Description: A brief description of the Plugin.
 * Version: The Plugin's Version Number, e.g.: 1.0
 * Author: Name Of The Plugin Author
 * Author URI: http://URI_Of_The_Plugin_Author
 * License: A "Slug" license name e.g. GPL2
 */
/*from http://wordpress.stackexchange.com/questions/120259/running-a-python-scri
pt-within-wordpress/120261?noredirect=1#120261  */
add_shortcode( 'python', 'embed_python' );

function embed_python( $attributes )
{
    $data = shortcode_atts(
        array(
            'file' => 'hello.py'
        ),
        $attributes
    );
    $handle = popen( __DIR__ . '/' . $data['file'], 'r');
    $read   = fread($handle, 2096);
    pclose($handle);

    return $read;
}

1
যদি এটি খুব সাধারণ স্ক্রিপ্ট হয় তবে আমি মনে করি যে আমি পিএইচপি-তে এটি একটি ওয়ার্ডপ্রেস প্লাগইন / টেম্পলেট ;-) হিসাবে আবার লিখব তবে কিছু ক্ষেত্রে লোকেরা বাইরের পৃষ্ঠাগুলি এম্বেড করার জন্য iframes ব্যবহার করে use
বার্গিরে

যদি সরাসরি তা হয়? :]
জেসি

এটি কি কোনও দুর্ঘটনা, বা আপনার অজগর কোডটি কি সত্যিই পিএইচপি এর সাথে মিশে গেছে?
ফুসিয়া

আমি টার্মিনাল ট্রেস পেস্ট করেছি, 'আরও' কমান্ড দ্বারা ফাইলগুলি প্রদর্শিত হচ্ছে ... একটু পরিপাটি করা হবে ...
জো

উত্তর:


20

আপনি পাইথন স্ক্রিপ্টটি popen()পড়তে বা লিখতে ব্যবহার করতে পারেন (এটি অন্য কোনও ভাষার সাথেও কাজ করে)। আপনার যদি ইন্টারঅ্যাকশন (ভেরিয়েবলগুলি পাসিং) প্রয়োজন হয় proc_open()

হ্যালো ওয়ার্ল্ড প্রিন্ট করার একটি সহজ উদাহরণ ! একটি ওয়ার্ডপ্রেস প্লাগ ইন

প্লাগইন তৈরি করুন, একটি শর্টকোড নিবন্ধ করুন:

<?php # -*- coding: utf-8 -*-
/* Plugin Name: Python embedded */

add_shortcode( 'python', 'embed_python' );

function embed_python( $attributes )
{
    $data = shortcode_atts(
        [
            'file' => 'hello.py'
        ],
        $attributes
    );

    $handle = popen( __DIR__ . '/' . $data['file'], 'r' );
    $read = '';

    while ( ! feof( $handle ) )
    {
        $read .= fread( $handle, 2096 );
    }

    pclose( $handle );

    return $read;
}

এখন আপনি সেই সংক্ষিপ্তটি পোস্ট সম্পাদকের সাথে [python]বা এর সাথে ব্যবহার করতে পারেন [python file="filename.py"]

আপনি যে পাইথন স্ক্রিপ্টগুলি ব্যবহার করতে চান তা প্লাগইন ফাইলের মতো একই ডিরেক্টরিতে রেখে দিন। আপনি এগুলি একটি ডিরেক্টরিতেও রাখতে পারেন এবং শর্টকোড হ্যান্ডলারের পথটি সামঞ্জস্য করতে পারেন।

এখন এটির মতো একটি জটিল পাইথন স্ক্রিপ্ট তৈরি করুন:

print("Hello World!")

এবং সব শেষ. শর্টকোডটি ব্যবহার করুন এবং এই আউটপুটটি পান:

এখানে চিত্র বর্ণনা লিখুন


সঠিক উত্তর বাদ পাইথন স্ক্রিপ্ট প্রথম লাইন, আমার ক্ষেত্রে অন্তত, # হওয়া প্রয়োজন যে, / usr / বিন / env পাইথন!
MikeiLL

1
@ মাইকিএলএল এটি ব্যবহারকারীর সিস্টেমে নির্ভর করে, তাই আমি ইচ্ছাকৃতভাবে এটি ছেড়ে দিয়েছি।
ফুসিয়া

মূলত একটি সুরক্ষা গর্ত করা। আপনি যদি পাইথন পাইপ করতে পারেন তবে আপনি অন্য যে কোনও প্রক্রিয়াতে পাইপও করতে পারেন এবং এটি আরও তুচ্ছ শোষণকে আরও বাড়ানোর জন্য ব্যবহার করা যেতে পারে।
মার্ক কাপলুন

3

আমি প্রথম উত্তরটি থেকে উদাহরণ স্ক্রিপ্ট অনুসরণ করেছি, কিন্তু কোনও আউটপুট বা ত্রুটি পাচ্ছিলাম না।

আমি এই লাইনটি পরিবর্তন করেছি:

$handle = popen( __DIR__ . '/' . $data['file'], 'r' );

এটি:

$handle = popen( __DIR__ . '/' . $data['file'] . ' 2>&1', 'r' );

এবং তারপরে একটি "অনুমতি অস্বীকৃত" বার্তা পেল।

কনসোলে, আমি দৌড়ে গেলাম

chmod 777 hello.py

পৃষ্ঠাটি রিফ্রেশ করে, এবং সমস্ত কিছুই নিখুঁতভাবে কাজ করে।

এটি জোটি উপরে দেখছে এমন সমস্যা হতে পারে। দুঃখিত, আমি কোনও মন্তব্য করার মত যথেষ্ট প্রতিনিধি নেই। আশা করি এটি কাউকে সাহায্য করবে।


অনুমতিটি 777 করবেন না। কেবল এটি কার্যকর করুন ut chmod +x filename.pyকরবে
টেসারাক্টর

2

proc_openপাইথন স্ক্রিপ্টে একটি সাধারণ পাঠ্য ভেরিয়েবল প্রেরণের জন্য উপরে বর্ণিত হিসাবে এখানে একটি ছোট স্ক্রিপ্ট রয়েছে:

add_shortcode( 'execute_python', 'execute_python_with_argv' );

function execute_python_with_argv( $attributes ){

$description = array (     
    0 => array("pipe", "r"),  // stdin
    1 => array("pipe", "w"),  // stdout
    2 => array("pipe", "w")   // stderr
);

$application_system = "python ";
$application_path .= plugin_dir_path( __FILE__ );
$application_name .= "hello.py";
$separator = " ";

$application = $application_system.$application_path.$application_name.$separator;

$argv1 = '"output to receive back from python script"';
$pipes = array();

$proc = proc_open ( $application.$argv1 , $description , $pipes );

//echo proc_get_status($proc)['pid'];

if (is_resource ( $proc ))
{
    echo "Stdout : " . stream_get_contents ( $pipes [1] ); //Reading stdout buffer
    fclose ( $pipes [1] ); //Closing stdout buffer
    fclose ( $pipes [2] ); //Closing stderr buffer

    $return_value = proc_close($proc);
    echo "<br/>command returned: $return_value<br/>";
}

$application_test = glitch_player_DIR.$application_name;

echo "<br/>Is ".$application_test." executable? ".is_executable($application_test)." ";
echo "readable? ".is_readable($application_test)." ";
echo "writable? ".is_writable($application_test)." ";

} //EOF main/shortcode function

পাইথন ফাইল কিনা তা নীচে হিসাবে কয়েকটি পরীক্ষা যুক্ত করে rwx। আমি মনে করি যে পাঠানোর আরও ভাল উপায় argvফ্রিটাইট ব্যবহার করা হবে তবে এই টিউটোরিয়ালটি অনুসরণ করে এটি আমার পক্ষে কাজ করছে না ।

এখানে আমি ব্যবহৃত পাইথন স্ক্রিপ্ট। উপরের মন্তব্যে উল্লিখিত হিসাবে #!/usr/bin/env python, সার্ভারের উপর নির্ভর করে এর মতো কিছু প্রয়োজনীয় হতে পারে।

#!/usr/bin/env python

from sys import argv

script, what_he_said = argv

print "This is what you submitted: %s \n \n Isn't that amazing, man? " % what_he_said
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.