web-dev-qa-db-ja.com

呼び出しPython in PHP

Pythonスクリプトをいくつか作成しました。いくつかのオプションを指定してコマンドラインを使用して呼び出すことを最近記述しました。

私のMacにmod_pythonまたはmod_wsgiをインストールするという小さなトラブルを経験したくないので、PHPを呼び出すためにsystem()またはpopen()を実行するだけでした。 Pythonスクリプト。

より良いアイデアはありますか?前もって感謝します!

75
Benny Wong

何をしているのかに応じて、 system() または popen() が完璧かもしれません。 Pythonスクリプトに出力がない場合、またはPythonスクリプトの出力をブラウザに直接送信する場合はpopen()を使用します。 Pythonスクリプトの標準入力にデータを書き込むか、PHPのPythonスクリプトの標準出力からデータを読み取ります。popen()は読み取りのみを許可しますまたは、両方ではなく両方を書きます。両方が必要な場合は、 proc_open() をチェックしてください。ただし、プログラム間の双方向通信では、各プログラムが他のプログラムの何かをする。

ユーザーが提供したデータをPythonスクリプトに渡したい場合は、コマンドインジェクションが重要です。注意していない場合、ユーザーは "; evilcommand; "そしてあなたのプログラムがあなたの意志に反して任意のコマンドを実行するようにします。

escapeshellarg() および escapeshellcmd() はこれに役立ちますが、個人的には、次のようなものを使用して、既知の良いキャラクターではないものをすべて削除したいです

preg_replace('/[^a-zA-Z0-9]/', '', $str)
101
Andru Luvisi

逆引用符演算子を使用すると、上記と同様の構文を使用してpythonスクリプトを実行できます

python python.pyというファイル:

hello = "hello"
world = "world"
print hello + " " + world

Python.phpというphpファイル内:

$python = `python python.py`;
echo $python;
25
user

PHP拡張機能: Pip-Python PHPで) もあります。機会

15
enobrev

Phpを介してpythonスクリプトを実行し、ブラウザで出力できます。

基本的には、pythonスクリプトを次のように呼び出す必要があります。

$command = "python /path/to/python_script.py 2>&1";
$pid = popen( $command,"r");
while( !feof( $pid ) )
{
 echo fread($pid, 256);
 flush();
 ob_flush();
 usleep(100000);
}
pclose($pid);

注:time.sleep()をpythonコードで実行すると、ブラウザーに結果が出力されません。

完全なコードの動作については、 実行方法python phpからスクリプトを実行し、ブラウザに出力を表示する方法

11
Idealmind

私はこの種のことを、すばやいスクリプトのためにいつもしています。 system/popenを使用して外部プログラムを呼び出すだけのCGIまたはPHPスクリプトがあります。

Webサーバーがインターネット全体に公開されている場合は、特に注意してください。この場合、攻撃者がマシン上で任意のコマンドを実行できないように、GET/POST入力を必ずサニタイズしてください。

7
Eli Courtwright

Call_python_file.phpは次のようになります。

<?php
    $item='Everything is awesome!!';
    $tmp = exec("py.py $item");
    echo $tmp;
?>

これはpythonスクリプトを実行し、結果をブラウザに出力します。pythonスクリプト中に(sys.argv [1:]))変数はすべての引数:argvを文字列として表示するには、テキストエリアを実行する場合にphpが取得する場所を指定します。

import sys

list1 = ' '.join(sys.argv[1:])

def main():
  print list1

if __== '__main__':
    main()
2
Aze

仮想環境を使用している場合(共有ホスティングなど)、pythonへのパスを調整する必要があることに注意してください。例:/home/user/mypython/bin/python ./cgi-bin/test.py

0
Bob3411

上記の方法は複雑なようです。私の方法を参考にしてください。

この2つのファイルがあります

run.php

mkdir.py

ここでは、GOボタンを含むHTMLページを作成しました。このボタンを押すたびに、パスを指定したディレクトリに新しいフォルダーが作成されます。

run.php

<html>
 <body>
  <head>
   <title>
     run
   </title>
  </head>

   <form method="post">

    <input type="submit" value="GO" name="GO">
   </form>
 </body>
</html>

<?php
    if(isset($_POST['GO']))
    {
        Shell_exec("python /var/www/html/lab/mkdir.py");
        echo"success";
    }
?>

mkdir.py

#!/usr/bin/env python    
import os    
os.makedirs("thisfolder");
0
Smshrimant