2010-04-29 10 views
12

Lo script My Ruby esegue un comando shell e analizza l'output da esso. Tuttavia, sembra che il comando venga prima eseguito e l'output salvato in un array. Mi piacerebbe poter accedere alle linee di output in tempo reale così come vengono stampate. Ho giocato con i thread, ma non ho potuto farlo funzionare. Eventuali suggerimenti?Can Ruby può accedere all'output dai comandi della shell così come appare?

risposta

21

Stai cercando tubi . Ecco un esempio:

# This example runs the netstat command via a pipe 
# and processes the data in Ruby as it come back 

pipe = IO.popen("netstat 3") 
while (line = pipe.gets) 
    print line 
    print "and" 
end 
+0

Ottima risposta, grazie mille! – Ciryon

+0

L'output viene effettivamente memorizzato nel buffer fino al completamento del comando, quindi verrà visualizzato l'output, se non si cura della real-time. – user180574

0

Quando i metodi/funzioni di chiamata di eseguire comandi shell di sistema /, il vostro interprete genera un altro processo per eseguirlo e aspetta che finisca, poi ti dà l'output.

Anche se si utilizzano i thread, l'unica cosa che si otterrebbe non è lasciare che il programma si blocchi mentre il comando è in esecuzione, ma non si otterrà l'output fino al suo completamento.

Penso che tu possa farlo con le pipe, ma non so come.

@Marcel capito.

Problemi correlati