Bir haskell programından bir işlem çağırmak ve stdora yanı sıra stderr yakalamak istiyorum.Haskell: System.Process birleştirme stdout ve stderr
yapmam gerekenler:
(_, stdout, stderr) <- readProcessWithExitCode "command" [] ""
sorun: Bu şekilde, stdout ve stderr ancak mesajları doğru yerde (görünmesini istediğiniz ayrı ayrı yakalanır aksi takdirde sadece stdout ++ stderr
hata iletileri ayırır hangi onların stdout meslektaşları). Ben borusunun tam bir dosyaya çıktı ediyorum eğer ben bunu başarmak pek bilmeyiz
, yani
tmp <- openFile "temp.file" ...
createProcess (proc "command" []) { stdout = UseHandle tmp,
stderr = UseHandle tmp }
Yani benim şimdiki geçici çözüm bir TempFile için boru çıkışlarına ve geri okudum. Ancak daha doğrudan bir yaklaşım arıyorum.
emin ben sadece la
command 2>&1
á bir kabuk komutu çağırmak istiyorum için ben UNix oldu ve bu kadar olursa. Ancak, bunu olabildiğince taşınabilir hale getirmek istiyorum.
Bunun için neye ihtiyacım var: Belirli bir programı çağırıp çıktıyı basan küçük bir haskell cgi betiği oluşturdum (sadece oynatmak için). Ben çıkıştan html-kaçmak istiyorum, bu yüzden basitçe stdout'a pipetleyemiyorum.
Düşünüyordum: Belki Java'da PipedInputStream/PipedOutputStream veya bellek içinde IO akışlarının işlenmesine izin veren ArrayInputStream/ArrayOutputStream gibi bir bellek içi tanıtıcı oluşturmak mümkündür. Hoogle'da :: Handle
numaralı bir işlev için etrafa baktım, ancak bir şey bulamadım.
Belki de iki akışı birleştirmeme izin veren başka bir Haskell modülü var mı?
[ 'createPipe'] (http://hackage.haskell.org/packages/archive/unix/latest/doc/html/System-Posix-IO-ByteString.html#v:createPipe) ve [' fdToHandle (http://hackage.haskell.org/packages/archive/unix/latest/doc/html/System-Posix-IO-ByteString.html#v:fDToHandle) yardımcı olacaktır. –