gpt4 book ai didi

ruby - 在 Ubuntu 中为 open() 方法指定一个非标准的临时目录

转载 作者:太空宇宙 更新时间:2023-11-03 16:28:34 25 4
gpt4 key购买 nike

有没有办法指定一个路径用作open() 方法的临时目录(同时使用open-uri)?

我将 Ubuntu 12.04 和 Ruby 2.0.0 与 RVM 一起使用 - 它使用标准系统临时目录 (/tmp)。当我下载大文件时,需要一段时间才能将文件从网络上拉下来并移动到目标目录中;另外,我不想填充 /tmp 文件系统。

我知道还有其他下载文件的方法,有些允许以 block 的形式写入数据,我只是想问一下标准的 open 方法和 open-uri

我使用的代码是:

['ftp://example1.com/a.gz', 'ftp://example2.com/b', 'example3.com/somefile'].
each do |uri|
thread = Thread.new do
3.times do
File.open(uri.split(/\//)[-1], "wb") do |file|
file.write open(uri).read
end
end
end

threads << thread
end

(所有这一切的重点是我要制作一个脚本,从任意站点拉出大文件,作为使网络链接饱和的一种方式,以检查吞吐量)。

最佳答案

查看OpenURI源代码我们可以看到它使用了Tempfile:

[...]
io = Tempfile.new('open-uri')
[...]

Tempfile 为了选择临时目录使用 Dir.tmpdir,它又使用系统临时目录或由环境变量 TMPDIR 指定的目录 (在其他人之间)。所以我们可以这样写:

require 'open-uri'
require 'fileutils'

d = "#{Dir.home}/.tmp"
Dir.mkdir d
ENV["TMPDIR"] = d
p open("http://www.google.com")
ENV.delete("TMPDIR")
FileUtils.rm_rf d

在单个命令中(请确保$HOME/.tmp不存在且未被使用):

ruby -ropen-uri -rfileutils -e 'd = "#{Dir.home}/.tmp"; Dir.mkdir d; ENV["TMPDIR"] = d; p open("http://www.google.com"); ENV.delete("TMPDIR"); FileUtils.rm_rf d'

它应该打印出类似的东西

#<Tempfile:$HOME/.tmp/open-uri20131115-16887-nag9pr>

P.S. 我使用的是 Ruby 2.1.0 预览版,所以您可能需要查看 #{ruby directory}/lib/ruby/2.0.0/open-uri.rb 源码,以便理解OpenURI是如何管理临时文件的(不过应该很相似)

关于ruby - 在 Ubuntu 中为 open() 方法指定一个非标准的临时目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20003492/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com