2012-12-09 10 views
10

Ho un raschietto che raschia un sito (scritto in python). Mentre raschi il sito, quelle linee di stampa che stanno per scrivere in CSV. Scraper è stato scritto in Python e ora voglio eseguirlo tramite codice PHP. La mia domanda èStampa output Python con codice PHP

come posso stampare ogni riga che viene stampata dal codice Python.

Ho usato la funzione exec ma non è il mio utilizzo e restituisce l'output dopo aver eseguito tutto il programma. Così;

E 'possibile ottenere l'output di Python stampato mentre viene eseguito tramite PHP.

risposta

4

Se ho capito bene, l'output di python scrapper su un file e si desidera "live" visualizzare l'output tramite php. Che ne dici di fare e loop in php in cui si utilizza filemtime per sapere se il file è stato aggiornato o meno? Potresti aggiungere un po 'di sleep per non sovraccaricare il tuo server.

Se si sta utilizzando una pagina Web, è possibile utilizzare AJAX per ricaricare solo la parte interessata della pagina a intervalli regolari.

Sperare che questo ti aiuti.

+0

Grazie, sembra che funzionerà. Hai capito bene il mio punto. Ma è possibile aprire il singolo file due volte con Python e anche con PHP contemporaneamente. Per quanto ne so, non possiamo farlo. –

+0

Python sembra in grado di farlo: http://stackoverflow.com/questions/9510183/can-python-do-parallel-writing-a-file-without-using-lock-or-mutex Per PHP, dato che si dovrebbe utilizzare la modalità di sola lettura, non penso che causerà alcun problema – martinqt

+0

In effetti c'è un piccolo problema. Python sembra scrivere il contenuto solo quando viene chiamato file.close(). Ma PHP è riuscito ad aprire il file in modalità di sola lettura mentre Python lo stava usando (o almeno così sembra). – martinqt

0

Comunicerei utilizzando stdout anziché un file. Significa che lo script python scrive su stdout e lo script php lo legge.

Utilizzando proc_open è possibile controllare il processo Python da php e leggere anche l'output.

+0

Ho controllato con 'proc_open', ma funziona come' exec'. Ci vuole tempo per eseguire il codice Python. E una volta terminata l'esecuzione, esegue il resto del codice PHP. Esiste un modo per "gestire entrambi i processi contemporaneamente?" –

0

Penso di avere una buona idea di quello che stai dicendo, non sono troppo sicuro di cosa intendi.

Se si intende dire che ogni volta che lo script python esegue una stampa, si desidera che il codice php generi l'output di stampa.

Se è il caso, è possibile passarlo come POST DATA via HTTP. Questo invece di stampare in Python, potresti inviarlo allo script PHP, che alla ricezione dei dati lo stamperebbe.

Non sono troppo sicuro se questo è quello che vuoi però.

2

caso semplice

Supponendo esecuzione del raschiatore è limitato a runtime php, gestita tramite popen: http://php.net/manual/en/function.popen.php

caso più coinvolti

Se si desidera raschietto per funzionare su sfondo e solo collegare ad esso nei php di tanto in tanto, è possibile utilizzare alcuni pub/sub toolkit o implementare un piccolo server web nel raschietto che provocare Offerte fopen è possibile recuperare ("https : // localhost: port/... ") o arricciatura. Sono possibili molti altri meccanismi RPC, socket di dominio, guardare un file, sysv rpc ...

0

Utilizzare semplicemente system() anziché exec(). exec() salva tutte le linee di uscita stdout del programma esterno in una matrice, ma system() vampate stdout uscita "come accade".