Domanda

Sto cercando di reindirizzare una patch l'output del comando utilizzando una named pipe. Ho cercato in questo modo:

fifo = os.path.join(self.path, 'pipe')
os.mkfifo(fifo)
op = os.popen('cat '+ fifo)
proc = Popen(['patch', current_keyframe, '--input='+fpath, '--output='+fifo], stdin=PIPE, stdout=PIPE)
os.unlink(fifo)
print op.read()

Ma il mio script si ferma a Popen () chiamata proprio come patch comando non ha completato. Come posso farlo funzionare correttamente?

È stato utile?

Soluzione

Non è in attesa per il comando patch per terminare prima di leggere dalla FIFO. Sostituire la chiamata subprocess.Popen() con subprocess.call() e rimuovere le redirezioni stdin / stdout non in uso. Inoltre, utilizzare open(fifo) per leggere dal FIFO, non os.popen('cat ' + fifo).

Si rende conto, spero, che si può evitare il FIFO del tutto? Dopo p = Popen(['patch', '--input', fpath], stdout=PIPE), si può solo leggere l'output di patch dal p.stdout.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top