WordPress中的Python--“Hello World”的实现

时间:2018-08-15 作者:N. H. Deutschland

我读过this question (以及更多的网页),以了解如何通过Wordpress插件运行简单的python脚本。

然而,我做不到:我总是得到一个“空白”输出。

未显示任何错误。

如何通过Wordpress插件执行python函数

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

我一步一步地尝试,最后成功了。

Step 1 - hello.py

我试图创建hello。在Windows 10上使用Atom复制文件,并多次将其上载到Linux服务器。它可以使用;蟒蛇3你好。py”字样;命令,但在使用时始终无法运行/你好py”字样;命令

我必须在Linux服务器和";上创建它/你好py”字样;命令生效。

# pwd
/var/www/html/wordpress/wp-content/plugins/run-python
# cat hello.py 
#!/usr/bin/env python3
print("Hello")
# chmod +x hello.py
# ./hello.py 
Hello

Step 2 - t-popen.py

我创建了t-popen。在Windows 10上使用Atom复制文件并将其上载到Linux服务器。此PHP文件用于确保popen() 功能正常。

# cat t-popen.php 
<?php

/* Add redirection so we can get stderr. */
$handle = popen( __DIR__ . \'/hello.py\', \'r\' );
$read   = \'\';

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

pclose( $handle );

var_dump( $read );
echo $read;
# php t-popen.php 
string(6) "Hello
"
Hello

Step 3 - The WP plugin

我创建了run python。Windows 10上带有Atom的php文件,并将其上载到Linux服务器。

<?php
/**
 * Try - Run Python
 *
 * @package     Try\\Run Python
 *
 * Plugin Name: Try - Run Python
 * Plugin URI:
 * Description: Try to run a Python script in the WordPress plugin.
 * Version:     1.0
 * Author:      Box
 * Author URI:
 */

add_shortcode( \'python\', \'embed_python\' );

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

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

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

    pclose( $handle );

    return $read;
}

Step 4

我激活了插件并尝试添加一个短代码[python] 到一个岗位。

“The”;“你好”;当我查看帖子时,内容中显示了字符串。

Note

上述3个文件都位于同一目录中,即/var/www/html/wordpress/wp-content/plugins/runpython“;在这种情况下。

SO网友:Mark Kaplun

您应该不能从PHP在服务器上运行任何脚本。这是一个你应该避免的安全噩梦。如果您只需要能够与服务器上的一些随机脚本进行通信,那么您应该将这种能力限制为仅受信任的计算机(最好使用使用使用不同php.ini的不同站点),或者找到一种迂回的方法来实现这一点,比如使用写入python脚本监视的文件来传递参数。(python中的open socket也可以是一个选项)。

如果如您在评论中所说,您需要在本地计算机上处理输出,只需使用wget 或者不管它的python等价物是什么,都可以从站点获取输出,然后对其进行处理。

结束