Errno::ENOENT: No such file or directory
即使文件存在,以下内容也会失败:
open('~/some_file')
Run Code Online (Sandbox Code Playgroud)
但是,我可以这样做:
open(File.expand_path('~/some_file'))
Run Code Online (Sandbox Code Playgroud)
我有两个问题:
open
将波形符处理为指向主目录?File.expand_path
吗?all*_*lar 118
不确定这是否在Ruby 1.9.3之前可用,但我发现最优雅的解决方案是使用Dir.home
哪个是核心的一部分.
open("#{Dir.home}/some_file")
Run Code Online (Sandbox Code Playgroud)
Roa*_*ter 105
$HOME
仅仅是一种惯例; 实际上,如果你查看文档File.expand_path
,它会正确解释波浪号,但它是函数本身的一个特征,而不是底层系统固有的东西; 此外,还File.expand_path
需要$HOME
正确设置环境变量.这带给我们可能的选择......试试这个:
open(ENV['HOME']+'/some_file')
Run Code Online (Sandbox Code Playgroud)我希望它足够光滑.我个人认为使用环境变量在语义上比使用更清晰expand_path
.
Vok*_*oro 12
$HOME
您可以使用以下命令从Ruby获取此信息,而不是依赖于正确设置的环境变量(这可能是您使用共享网络计算机进行开发时的麻烦).
require 'etc'
open ("#{Etc.getpwuid.dir}/some_file")
Run Code Online (Sandbox Code Playgroud)
我相信这可以识别当前登录的用户并获取其主目录,而不是依赖于$HOME
所设置的全局环境变量.这是我认为的上述替代解决方案.
归档时间: |
|
查看次数: |
36600 次 |
最近记录: |