0

Pythonプログラムを呼び出すPHPスクリプトがあります。これがphpスクリプトです:

<?php
    $last_line = popen('/Library/Frameworks/Python.framework/Versions/Current/bin/python test.py', 'r');
    $results = fgets($last_line);
    print $results;
?>

これはtest.pyの内容です:

test.py:

    import numpy as np
    from matplotlib.patches import Ellipse
    # import matplotlib.pyplot as plt
    # from matplotlib.pyplot import figure, show
    # import pylab 

    print "Hello World!"

これで問題なく動作し、「HelloWorld!」が表示されます。ブラウザで。ただし、インポートのコメントを解除すると(つまり、matplotlib.pyplotをpltとしてインポートする、matplotlib.pyplotをpltとしてインポートする、またはpylabをインポートする)、PHPから結果を取得できません。Pythonのすべてのプロット関数が必要なので、誰かがこれを手伝ってくれるといいですね。

4

3 に答える 3

1

pythonスクリプトがphpを介して実行されたときに、matplotlib部分が実行されませんでした。次に、次のステートメントを .py ファイルに含めます。

import os
os.environ[ 'MPLCONFIGDIR' ] = '/tmp/'

import matplotlib

matplotlib.use('agg')

そしてそれは働いた...

于 2014-03-15T05:31:04.177 に答える
0

完全な答えはありませんが、おそらく役立つでしょう:

Mac OS を使用していると仮定して、.phpファイルを次のように変更しました。

<br><br>==== Start ====<br><br>

<?php
    error_reporting(E_ALL);

    $handle = popen('python test.py 2>&1', 'r');
    while (($buffer = fgets($handle, 4096)) !== false) {
        echo $buffer."<br>";
    }
    pclose($handle);

?>

<br><br>==== End ====<br><br>

および.pyファイルを次のようにします。

import numpy as np
import matplotlib.pyplot as plt

print "Hello World!"

2>&1、プログラムのエラー出力を標準出力にリダイレクトします。これは、デバッグ目的に役立ちます。

ブラウザのページの結果には次の内容が含まれていました。

ファイル " /Library/Python/2.6/site-packages/matplotlib-0.91.1-py2.6-macosx-10.6-universal.egg/matplotlib/ init .py"、403 行目、_get_configdir で RuntimeError("Failed to create %s/.matplotlib; MPLCONFIGDIR を matplotlib 構成データの書き込み可能なディレクトリに設定することを検討してください"%h) RuntimeError: Failed to create /Library/WebServer/.matplotlib; MPLCONFIGDIR を matplotlib 構成データの書き込み可能なディレクトリに設定することを検討してください

私がルートとして行ったよりも:

mkdir /Library/WebServer/.matplotlib
chown _www /Library/WebServer/.matplotlib/

そして、最後のエラーとして含まれていたブラウザのページより:

ファイル " /Library/Python/2.6/site-packages/matplotlib-0.91.1-py2.6-macosx-10.6-universal.egg/matplotlib/numerix/ma/ init .py"、16 行目、numpy.core から.ma import * ImportError: ma という名前のモジュールがありません

うーん、それはまだ残念ですが、走行距離は異なる場合があります。問題はおそらく、Web サーバー ユーザー (_www) の環境/権限に関係しています。

于 2013-03-14T20:42:28.020 に答える
0

Jan Kuiken をお試しいただきありがとうございます。悪戦苦闘の末、ようやく理解できました。まず、このページで提案されているように、以下を に追加しましたtest.py

import os
os.environ[ 'MPLCONFIGDIR' ] = '/tmp/'
import matplotlib
matplotlib.use('agg')

インポートしpylabます (つまり、コメントを外します)。

これはコマンドラインからは機能しましたが、ブラウザーでは機能しませんでした。次に、パススルーを実行すると、ブラウザに次のエラーが表示されました。

dyld: Symbol not found: __cg_jpeg_resync_to_restart
Referenced from: /System/Library/Frameworks/ApplicationServices...
Expected in: /Applications/MAMP/Library/lib/libjpeg.62.dylib

ImageMagick に問題があるはずだと判断し、次のページの提案に従いました: Getting MAMP 1.9 to work with ImageMagick

そして、正しくインストールした後、Pythonコードを実行することができました。Pythonコードには、図をプロットして保存するコマンドがあり、その場合はImageMagickが必要だと思います!

于 2013-03-14T20:57:18.433 に答える