我在Ruby腳本運行以下(備份)代碼:如何實時打印exec()的輸出?
for directory in directories
print `s3sync.rb --exclude="#{EXCLUDE_REGEXP}" --delete --progress -r #{directory} my.amazon.backup.bucket:#{directory}`
end
我想執行的子過程的輸出被回送到實時終端(而不是必須等待,直到子過程返回)。我怎麼做?
我在Ruby腳本運行以下(備份)代碼:如何實時打印exec()的輸出?
for directory in directories
print `s3sync.rb --exclude="#{EXCLUDE_REGEXP}" --delete --progress -r #{directory} my.amazon.backup.bucket:#{directory}`
end
我想執行的子過程的輸出被回送到實時終端(而不是必須等待,直到子過程返回)。我怎麼做?
如果你不需要你的代碼來查看標準輸出,並且它是足夠的,人類看到它,比系統是好的。如果你需要你的代碼來看它,有很多解決方案,popen是最簡單的,讓你的代碼訪問stdout,Open3讓你的代碼訪問stdout和stderr。參見:Ruby Process Management
哎呀,馬上就知道了。我不得不使用EXEC(),而不是``
這做什麼,我想:
for directory in directories
exec `s3sync.rb --exclude="#{EXCLUDE_REGEXP}" --delete --progress -r #{directory} my.amazon.backup.bucket:#{directory}`
end
IO.popen
創建一個進程,並返回一個IO對象爲這一進程的stdin和stdout。
IO.popen("s3sync.rb …").each do |line|
print line
end
這是否適用於彩色輸出? – hfossli
你確定這是做你想做的嗎?該文檔指出,exec *會替換當前進程,因此,在爲第一個目錄運行s3sync.rb之後,您的程序將結束執行。我想你會想使用Kernel#system。更多信息,請訪問http://blog.jayfields.com/2006/06/ruby-kernel-system-exec-and-x.html – DataWraith
哦,很好的電話。我只有1個目錄被備份到目前爲止,所以我錯過了這個! –