2016-06-20 6 views
3

Mit Blick auf the API sieht es nicht wie Interleaving (Umleitung von stdout zu stderr in Echtzeit oder umgekehrt) wird unterstützt. Wie würde ich es bei Bedarf tun?Wie verschachteln stderr und stdin zu einem std :: process :: Command?

+0

Wenn Sie unter Unix sind, denke ich, dass Sie 'to_raw_fd()' verwenden können, um den gewünschten Dateideskriptor zu erhalten, und 'from_raw_fd()', um '' Stdio' für 'Command' zu erstellen. –

+0

Sah aus, wie das funktionieren würde, und fand mich in einem Labyrinth – Tshepang

+1

Schauen Sie genauer hin, ich stimme zu, ich glaube nicht, dass es direkt unterstützt wird. Ein Brute-Force-Weg wäre es, die Shell zu verwenden (dh die Installation von spawing 'my_prog foo', spawn' sh -c 'my_prog foo 2> & 1'', mit etwas Sorgfalt für die erforderlichen Zitate. –

Antwort

-1

Was ist die Quelle der Verwirrung? Sie können ein Stdio Objekt mit FromRawFd::from_raw_fd erstellen und ihm einen Dateideskriptor zuweisen, der als Stdio das Merkmal verwendet.

+0

Diese Antwort funktioniert nur unter UNIX -ähnliche Systeme und ist nicht plattformübergreifend Beachten Sie das ** unix ** im Typnamen: 'std :: os :: unix :: io :: FromRawFd'. – Shepmaster

+1

Es wäre auch gut, ein ** complete zu zeigen ** Beispiel, wo stderr und stdout verschachtelt sind – Shepmaster

+0

Ich sehe nichts aggressives über "was ist die Quelle der Verwirrung". Ich habe nur ehrlich gefragt. Und ja, diese Lösung ist nur unix. Vielleicht könnte man eine Kiste schreiben, die abstrahiert Dies ist weg für andere Plattformen –

Verwandte Themen