在WordPress中运行一个python脚本

时间:2013-10-27 作者:Joe

我为一个个人博客安装了WordPress,我正在逐步将多年来写的所有小网站移植到博客页面上。

其中一页是http://www.projecttoomanycooks.co.uk/cgi-bin/memory/majorAnalysis.py 这是一个简单的python脚本,它返回一个单词列表-我想将该行为嵌入wordpress页面中-有人能为我指出在wordpress中运行python的简单方法的正确方向吗?

编辑-根据下面精彩的答案,我有很多进一步的。。。但不幸的是仍然不太清楚。。。

我有在服务器上执行的python。。。

projecttoomanycooks server [~/public_html/joereddington/wp-content/plugins]#./hello.py 
Hello World!
它和激活的插件在同一个目录中。。。

python代码。。。其中包含以下代码。。。

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

<?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;
}

3 个回复
最合适的回答,由SO网友:fuxia 整理而成

您可以使用popen() 阅读or 编写Python脚本(这也适用于任何其他语言)。如果需要交互(传递变量),请使用proc_open().

打印Hello World的简单示例在WordPress插件中创建插件,注册短代码:

<?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;
}
现在,您可以在post editor中使用该短代码[python][python file="filename.py"].

将要使用的Python脚本与插件文件放在同一目录中。您还可以将它们放入目录中,并在短代码处理程序中调整路径。

现在创建一个复杂的Python脚本,如下所示:

print("Hello World!")
仅此而已。使用快捷码,并获得以下输出:

enter image description here

SO网友:thepotoo

我遵循了第一个答案中的示例脚本,但没有得到任何输出或错误。

我更改了此行:

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

$handle = popen( __DIR__ . \'/\' . $data[\'file\'] . \' 2>&1\', \'r\' );
然后收到一条“权限被拒绝”的消息。

在控制台上,我运行

chmod 777 hello.py
刷新了页面,一切正常。

这可能是乔在上面看到的问题。对不起,我没有足够的代表发表评论。希望这对别人有帮助。

SO网友:MikeiLL

这里有一个小脚本proc_open 如上所述,要向python脚本发送一个简单的文本变量,请执行以下操作:

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
在底部添加了一些测试,以查看python文件是否rwx. 我认为发送argv 将使用fwrite,但它对我来说不起作用this tutorial.

这是我使用的python脚本。正如上面的评论所指出的,类似于#!/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

结束

相关推荐

如何使用PYTHON使用Blogger API拉取WordPress博客数据

Wordpress提到它支持Blogger API(link). 那么,谁能告诉我如何使用Blogger API(使用python)v3来获取wordpress公共博客数据。或者,是否有任何wordpress API可以从其博客中提取公共数据?(语言:Python)。如果有任何有用的文件能够清楚地解释程序,我们将不胜感激。