passthru
の使用をお勧めします 出力バッファを直接処理:
ob_start();
passthru('/usr/bin/python2.7 /srv/http/assets/py/switch.py arg1 arg2');
$output = ob_get_clean();
Ubuntu Server 10.04 でテスト済み。 Arch Linux でも役立つことを願っています。
PHP では、shell_exec 関数を使用します:
<ブロック引用>シェル経由でコマンドを実行し、完全な出力を文字列として返します。
実行されたコマンドからの出力を返します。エラーが発生した場合、またはコマンドが出力を生成しない場合は NULL を返します。
<?php
$command = escapeshellcmd('/usr/custom/test.py');
$output = shell_exec($command);
echo $output;
?>
Python ファイル test.py
に 、最初の行でこのテキストを確認してください:(シバンの説明を参照):
#!/usr/bin/env python
<ブロック引用> Python の複数のバージョンがインストールされている場合、/usr/bin/env は、使用されるインタープリターが環境の $PATH の最初のものであることを保証します。別の方法は、#!/usr/bin/python; のようなものをハードコードすることです。それは問題ありませんが、柔軟性に欠けます。
Unix では、解釈されることを意図した実行可能ファイルは、使用するインタープリターを #! で示すことができます。最初の行の先頭に、その後にインタープリター (および必要なフラグ) が続きます。
もちろん、他のプラットフォームについて話している場合、このルールは適用されません (しかし、その「シェバン行」は害を及ぼすものではなく、そのスクリプトを Linux や Mac などの Unix ベースのプラットフォームにコピーする場合に役立ちます)。 ).
<ブロック引用>これは、Unix で実行可能 (chmod +x myscript.py) にしてから直接実行する場合に適用されます:
UNIX タイプのプラットフォームで実行可能ファイルを作成するには:
chmod +x myscript.py
また、Python ファイルには正しい権限 (PHP スクリプトがブラウザーまたは curl で実行される場合はユーザー www-data / apache の実行) が必要であり、"実行可能" である必要があります。また、すべてのコマンドは .py
に ファイルには正しい権限が必要です。
PHP マニュアルから引用:
<ブロック引用>aunix タイプのプラットフォームで shell_exec を使用しようとしていて、それを機能させることができないように思われる方への簡単なリマインダーです。 PHP はシステム上で Web ユーザー (通常は Apache の場合は www) として実行されるため、shell_exec コマンドで使用しようとしているファイルやディレクトリに対する権限が Web ユーザーにあることを確認する必要があります。
コマンドのリターンステータスを知りたい場合やstdout
全体を取得したい場合 できる出力 実際に exec
を使用 :
$command = 'ls';
exec($command, $out, $status);
$out
すべての行の配列です。 $status
返却状況です。デバッグに非常に便利です。
stderr
も見たい場合 出力は proc_open で再生するか、単に 2>&1
を追加することができます あなたの $command
に .後者は多くの場合、物事を機能させ、「実装」するのに十分です.