2012-12-09 10 views
10

私は1つのサイトをスクレイプするスクレーパーを持っています(Pythonで書かれています)。サイトを削っている間に、CSVで書き込む行が印刷されます。 ScraperはPythonで書かれていますが、今はPHPコードで実行したいと思っています。私の質問はPHPコードによる出力Pythonコード

どのように私はpythonコードで印刷されている印刷することができます。

私はexec関数を使用していますが、私の使用ではなく、すべてのプログラムを実行した後に出力します。そう;

PHP経由で実行されている間に、python出力を出力することは可能ですか?

答えて

4

私がよく理解していれば、あなたのpython scrapperがファイルに出力して、あなたは "live"して、出力をphpで表示したいと思っています。あなたはファイルを更新したかどうかを知るためにfilemtimeを使うphpでやってループするのはどうですか?サーバーに過度の負荷がかからないように少しsleepを追加することがあります。

ウェブページを使用している場合は、AJAXを使用してページの該当部分のみを一定間隔でリロードすることができます。

これを参考にしてください。

+0

ありがとうございます、それはうまくいくようです。あなたは私のポイントをよく持っています。しかし、PythonとPHPの両方で同時に1つのファイルを開くことは可能ですか?私が知る限り、私たちはそれをすることはできません。 –

+0

Pythonはそうすることができます:http://stackoverflow.com/questions/9510183/can-python-do-parallel-writing-a-file-without-using-lock-or-mutex PHPの場合、読み取り専用モードを使用すると、私はそれが問題を引き起こすとは思わない – martinqt

+0

実際には小さな問題があります。 Pythonは、file.close()が呼び出されたときにのみ内容を書き込むようです。しかし、PHPはPythonがそれを使用している間(またはそれのように)、読み取り専用モードでファイルを開くことができました。 – martinqt

0

ファイルの代わりにstdoutを使用して通信します。つまり、pythonスクリプトはstdoutに書き込みを行い、PHPスクリプトはそれを読み込みます。

proc_openを使用すると、PHPからのpythonプロセスを制御し、その出力も読み取ることができます。

+0

私は 'proc_open'でチェックしましたが、' exec'と同じように動作しています。 Pythonコードを実行するには時間がかかります。実行が終了すると、残りのPHPコードが実行されます。 '両方のプロセスを同時に処理する '方法はありますか? –

0

execの代わりにpassthruを使用すると、ブラウザに直接データが出力されます。 http://php.net/manual/en/function.passthru.php

これは、スクリプトからprintlnを取得するのに十分なはずです。

0

私は、あなたが言っていることについて公正なアイデアを持っていると思います。

Pythonスクリプトが印刷を行うたびに、PHPコードで印刷されたものが出力されるようにしたいとお考えの場合は、

この場合、HTTP経由でPOST DATAとして渡すことができます。これはPythonで印刷する代わりに、PHPスクリプトに送ることができます.PPPスクリプトは、データを受け取ると印刷します。

これがあなたの望みどおりであるかどうかはわかりません。

2

シンプルなケースではスクレーパーの実行を想定し

はpopenのを経由して、それを実行し、PHPランタイムに制限されている:http://php.net/manual/en/function.popen.php

より複雑なケース

スクレイパーをバックグラウンドで実行し、時にはphpに接続するだけの場合は、いくつかのpub/subツールキットを使用するか、scopperで小さなWebサーバーを実装してfopen( "https :// localhost:port/... ")またはカール。他の多くのrpcメカニズム、ドメインソケット、ファイルの監視、sysv rpc ...

0

exec()の代わりにsystem()を使用してください。 exec()は、外部プログラムのすべてのstdout出力を配列に保存しますが、system()はstdout出力を "そのまま"フラッシュします。