10

私は1つのサイトをスクレイピングするスクレーパーを持っています(Pythonで書かれています)。サイトをスクレイピングしているときに、CSV に書き込もうとしている行を出力します。Scraper は Python で書かれており、PHP コードを介して実行したいと考えています。私の質問は

Pythonコードによって印刷されている各行を印刷するにはどうすればよいですか。

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

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

4

7 に答える 7

4

私がそれをよく理解していれば、あなたのpythonスクレーパーはファイルに出力し、php経由で出力を「ライブ」表示したいと考えています。ファイルが更新されたかどうかを知るためにfilemtimeを使用するphpで実行してループするのはどうですか? サーバーに過負荷をかけないように、少しスリープを追加することもできます。

Web ページを使用している場合は、AJAX を使用してページの関連部分のみを定期的にリロードできます。

これがお役に立てば幸いです。

于 2012-12-09T12:18:15.770 に答える
2

シンプルなケース

スクレーパーの実行が php ランタイムに限定されていると仮定して、popen 経由で実行します: http://php.net/manual/en/function.popen.php

より複雑なケース

スクレイパーをバックグラウンドで実行し、時々 php にのみ接続する場合は、pub/sub ツールキットを使用するか、fopen("https: //localhost:port/...") または curl. ドメイン ソケット、ファイルの監視、sysv rpc など、他にも多くの rpc メカニズムが可能です。

于 2012-12-19T19:33:47.077 に答える
0

私はあなたが言っていることをかなり理解していると思いますが、あなたが何を意味するのかよくわかりません.

Pythonスクリプトが印刷を行うたびに、phpコードに印刷されたものを出力させたいと言いたいのですか?

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

これがあなたの望むものかどうかはよくわかりません。

于 2012-12-19T12:19:04.723 に答える
0

system()の代わりに使用するだけですexec()exec()外部プログラムの stdout 出力のすべての行を配列に保存しますが、stdout 出力はsystem()「発生したときに」フラッシュします。

于 2012-12-21T12:04:49.630 に答える
0

ファイルの代わりに stdout を使用して通信します。Pythonスクリプトがstdoutに書き込み、phpスクリプトがそれを読み取ることを意味します。

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

于 2012-12-17T21:02:01.023 に答える
0

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

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

于 2012-12-18T11:19:05.883 に答える
0

適切な通信のためには、任意のメディアをセットアップする必要があるため、fifo を使用できます。これにより、python で文字列を書き、php で読み取ることができます。

PHP fifo の場合 http://php.net/manual/en/function.posix-mkfifo.php

Python の場合 http://www.doughellmann.com/PyMOTW/Queue/

于 2012-12-19T19:19:36.933 に答える