最近書いたPythonスクリプトがあり、いくつかのオプションを指定してコマンドラインを使用して呼び出します。Macでこのスクリプトをローカルに呼び出すための非常に薄いWebインターフェイスが必要です。
Macにmod_pythonまたはmod_wsgiをインストールするという小さな問題を経験したくないので、PHPからsystem()またはpopen()を実行してPythonスクリプトを呼び出すだけでした。
より良いアイデアはありますか?前もって感謝します!
回答:
何をしているかによって、system()またはpopen()が最適な場合があります。Pythonスクリプトに出力がない場合、またはPythonスクリプトの出力をブラウザーに直接送信する場合は、system()を使用します。Pythonスクリプトの標準入力にデータを書き込む場合、またはphpのPythonスクリプトの標準出力からデータを読み取る場合は、popen()を使用します。popen()は、読み取りまたは書き込みのみを許可し、両方は許可しません。両方が必要な場合は、proc_open()を確認してください。ただし、プログラム間の双方向通信では、各プログラムが他のプログラムが何かを実行するのを待っているデッドロックを回避するように注意する必要があります。
ユーザーが指定したデータをPythonスクリプトに渡したい場合、注意すべき重要なことはコマンドの挿入です。注意しないと、ユーザーから「; evilcommand;」のようなデータが送信される可能性があります。そしてあなたのプログラムにあなたの意志に反して任意のコマンドを実行させます。
escapeshellarg()とescapeshellcmd()はこれに役立ちますが、個人的には、次のようなものを使用して、既知の適切な文字ではないものをすべて削除するのが好きです。
preg_replace('/[^a-zA-Z0-9]/', '', $str)
PHP拡張機能もあります:Pip-PHPのPython、私は試したことがありませんが、そのような機会のためにブックマークしました
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);
注:Pythonコードでtime.sleep()を実行すると、ブラウザーに結果が出力されません。
完全なコードが機能するようにするには、PHPからPythonスクリプトを実行し、ブラウザーに出力を表示する方法にアクセスしてください。
tempmonあり、同じフォルダにPythonスクリプトが含まれています。アプリケーションを移植可能にしたいので、のtempmon下のフォルダをコピーするだけhtdocsです。そして、同じことが異なるマシンでも機能するはずです。
call_python_file.phpは次のようになります。
<?php
$item='Everything is awesome!!';
$tmp = exec("py.py $item");
echo $tmp;
?>
これにより、Pythonスクリプトが実行され、結果がブラウザに出力されます。Pythonスクリプトでは、(sys.argv [1:])変数がすべての引数を取り込みます。phpがプルしている場所の文字列としてargvを表示するには、テキスト領域を実行する場合は次のようにします。
import sys
list1 = ' '.join(sys.argv[1:])
def main():
print list1
if __name__ == '__main__':
main()
上記の方法は複雑なようです。私の方法を参考にしてください。
私はこの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");
PythonスクリプトをPHPで実行する場合は、phpスクリプトで次のコマンドを実行する必要があります。
exec('your script python.py')
yourはパラメータscriptとを使用してプログラムを呼び出そうとしますpython.py。b)Pythonスクリプトに適切なシバンがない限り、Pythonインタープリターを呼び出して、スクリプト名を渡す必要があります(python script.py)。適切なシバンがあっても./script.py、インタプリタ名を使用する代わりに呼び出すので、これは間違っています。