2013-03-31 126 views
-1

所以我有一些ruby代碼循環把字符串輸出到stdout使用puts然後睡覺使用sleep。然後我有一些node.js代碼在stdin上監聽數據事件,並簡單地記錄它從stdin獲取的內容。UNIX管道故障

如果我運行echo 'something' | node my_code.js我會看到一些東西,但是如果我運行ruby my_code.rb | node my_code.js我什麼也沒看到。

我不能使用UNIX管道將標準輸出從ruby代碼重定向到node.js代碼的stdin?

回答

0

這兩者之間應該沒有什麼區別,Ruby代碼應該沒問題。

但是,你正在發現一些問題。如果通過tee運行Ruby,會發生什麼情況?

ruby my_code.rb | tee file 

您是否看到輸出?如果沒有,開始調查你的Ruby代碼。 (當你運行它而不管它的輸出時它工作嗎?)。如果您確實看到了輸出,Ruby程序是否會停止(退出)?你有命令行提示嗎?

如果沒有什麼異常與紅寶石,當你管一個多文件,它有什麼用JavaScript的情況:

cat my_code.rb | node my_code.js 

我希望這些情況之一爲您提供一些追逐。

+0

管道到'發球file'不會產生任何東西到標準輸出或文件中。紅寶石代碼處於連續循環中,不會退出。這是對管道的要求嗎? –

+0

那麼,它的Ruby代碼不會在管道上產生任何東西,那麼JavaScript就沒有辦法從管道中讀取任何信息。你的Ruby代碼在做什麼?當它在輸出中沒有任何重定向的情況下運行時它會做什麼?它是否寫入標準輸出?如果它不寫入標準輸出,那麼管道輸出不起作用。 –

+0

它打印到標準輸出就好了。代碼基本上是: 'loop {puts Random.rand;睡眠2}' –

0

試試這個:

ruby my_code.rb | awk '{print;fflush()}' | node my_code.js 

或者這樣:

ruby my_code.rb | grep --line-buffer '.*' | node my_code.js 
+0

沒有豆子。 :(謝謝你試圖幫助,但! –