我怎么能说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