我怎麼能說unix'ls'(桌面,圖片,音樂myysong.mp3等)的輸出轉換爲字符串?Ruby系統('ls')來串?
回答
反引號執行系統命令並將其作爲字符串返回。
result = `ls ~/Downloads`
puts result.reverse
puts result.split('/')
+1這很甜。每天學些新東西。 :)我一直使用系統而不知道輸出作爲字符串返回。 – Beanish 2010-01-25 18:16:49
Ruby中的每個方法都會返回一些東西。當然,有時候某些東西是「無」的,但更多的時候,回報就是你所期望的。只需啓動'irb'並嘗試。如果它打印輸出,那麼它返回了一些東西。 – 2010-01-25 18:33:26
你的意思是捕獲'ls'命令的輸出嗎?你可以在Ruby中使用``。例如:
mystring = `ls <dir>`
print mystring.strip();
所以,我想我會編輯我以前的答案。如果您不幸在ls命令中遇到錯誤(例如路徑不存在)或任何其他系統命令,則輸出將顯示給STDERR,從而使其顯示在屏幕上,無論您是否喜歡它否則,反引號將不會捕獲(它們只會得到STDOUT)。 要解決這個問題,只需將2> & 1添加到命令的末尾即可。 例如:
#!/usr/bin/ruby -w
mystring = `ls /path/does/not/exist 2>&1`;
# above will not display anything to screen but will hold error message in mystring
print mystring;
# outputs: ls: cannot access /path/does/not/exist: No such file or directory
希望這會有所幫助。
如此正式地使用分號! – tadman 2010-01-25 18:40:48
這是一種習慣,我還沒有能夠踢,但不幸的是; – user198470 2010-01-25 18:53:01
我喜歡分號。 – JAL 2010-01-25 20:18:46
如果有使用ls和使用用戶的輸入,你需要偏執:
d = IO.popen("-"){|f| if f then break f.read else system('ls', user_input) end }
這似乎是做最安全的方式,因爲它直接傳遞USER_INPUT到LS作爲ARGV [1],而不是將整個字符串發送到shell。
用``,/; rm -Rf ~
的用戶輸入會導致悲傷的面孔。上面的(可怕的長)方法只會導致錯誤。
在最後一句中對或引用您的初始反引號以修復語法突出顯示以供評論。 – 2010-01-25 21:22:39
- 1. 來自Ruby的系統調用
- 2. Linux系統:結合 「LS」 和 「CP」 命令
- 3. 如何讀取系統輸出('ls')?
- 4. 系統登錄Ruby?
- 5. 從系統::串串
- 6. Jenkins使用系統Ruby - 使用rvm ruby?
- 7. Ruby官方系統名稱
- 8. Ruby系統方法參數
- 9. Ruby和系統輸入
- 10. Ruby On Rails,聲譽系統
- 11. 的Mac系統無法找到Ruby的文件來執行
- 12. 來自方法的系統調用(ruby on rails)
- 13. 使用Ruby來自動化大型目錄系統
- 14. 告訴「ls -laR /」:不要遞歸到其他文件系統
- 15. 系統調用execve不會使用ls函數返回
- 16. C編程linux,讀取系統輸入如ping或ls -l
- 17. 如何使一個Ruby字符串安全的文件系統?
- 18. Ruby on rails從系統命令字符串搜索
- 19. 阻塞來電android系統
- 20. 來自另一個系統
- 21. Ruby系統()不接受UTF-8?
- 22. 如何設置Ruby的系統路徑?
- 23. Ruby從系統命令返回(sox)
- 24. Ruby supress系統真實輸出
- 25. Ruby中的靈活系統調用
- 26. Ruby通用文件系統庫
- 27. 讓Ruby系統運行'Make'文件
- 28. Ruby中的多線程系統調用
- 29. ruby heroku系統時間問題
- 30. Ruby與社會管理系統的Python!
最好不要訴諸殼,如果你能幫助它!任何不爲'Dir.entries'或'foreach'的理由? – bobince 2010-01-25 19:01:49