我的python应用程序在几个小时的工作中使用Selenium Webdriver加载网页总共20000页.我的问题是"某些东西"正在创建大量的tmp文件,填满了我的所有硬盘.例如,今天早上应用程序在6小时的工作中生成70GB的tmp文件:(重启Ubuntu后,所有这些文件都消失了.我认为负责的是Firefox.
这种情况在Linux和OS X上都会发生.
def launchSelenium (url):
profile = webdriver.FirefoxProfile()
profile.set_preference("network.proxy.type", 1)
profile.set_preference("network.proxy.http", "127.0.0.1")
profile.set_preference("network.proxy.http_port", 8080)
profile.set_preference("webdriver.load.strategy", "fast")
profile.set_preference("permissions.default.stylesheet", 2)
profile.set_preference("permissions.default.images", 2)
profile.set_preference("dom.ipc.plugins.enabled.libflashplayer.so", "false")
profile.set_preference("browser.sessionstore.enabled", "false")
profile.set_preference("browser.cache.disk.enable", "false")
profile.update_preferences()
driver = webdriver.Firefox(firefox_profile=profile)
driver.get(url)
try:
element = driver.find_element_by_xpath("//button[@title='Statistics']").click()
except NoSuchElementException:
print "Not available"
driver.close()
return 0
driver.close()
return 1
Run Code Online (Sandbox Code Playgroud)
我在Firefox Profile中添加了最后两个首选项,试图解决这个问题,但没有任何改变.
难道我做错了什么?Selenium有一个错误?谢谢
我的Passenger Rails应用程序中出现了大约500个错误.查看日志时,乘客无法访问/ tmp目录.我已经验证它存在并且具有对root的RW访问权限,然后尝试了www-data.这里发生了什么?
2014-01-14 16:01:16.6573 20624/7fa7c8806700 Pool2/SmartSpawner.h:301 ]: Preloader for /var/www/socialrest_homepage started on PID 20686, listening on unix:/tmp/passenger.1.0.20618/generation-0/backends/preloader.20686
App 20704 stdout:
[Tue Jan 14 16:01:17 2014] [error] [client 168.215.171.129] Premature end of script headers:
App 20686 stderr: /usr/local/rvm/rubies/ruby-2.0.0-p353/lib/ruby/2.0.0/tmpdir.rb:34:in `tmpdir': could not find a temporary directory (ArgumentError)
App 20686 stderr: from /usr/local/rvm/gems/ruby-2.0.0-p353/gems/passenger-4.0.33/lib/phusion_passenger/utils/tmpio.rb:17:in `new'
App 20686 stderr: from /usr/local/rvm/gems/ruby-2.0.0-p353/gems/passenger-4.0.33/lib/phusion_passenger/utils/tee_input.rb:99:in `initialize'
App 20686 stderr: from /usr/local/rvm/gems/ruby-2.0.0-p353/gems/passenger-4.0.33/lib/phusion_passenger/rack/thread_handler_extension.rb:55:in `new'
App 20686 stderr: from /usr/local/rvm/gems/ruby-2.0.0-p353/gems/passenger-4.0.33/lib/phusion_passenger/rack/thread_handler_extension.rb:55:in `process_request'
App 20686 stderr: from /usr/local/rvm/gems/ruby-2.0.0-p353/gems/passenger-4.0.33/lib/phusion_passenger/request_handler/thread_handler.rb:141:in `accept_and_process_next_request'
App 20686 stderr: from …Run Code Online (Sandbox Code Playgroud) 每次我的嵌入式虚拟tomcat服务器运行(spring boot)时,它都会创建一个/tmp/名为的目录结构tomcat.##########################.8080(我猜8080是用于端口或其他东西,但8080是一致的).这种结构不会占用太多空间,但经常运行tomcat服务器后,这可能会填满.我可以作为可配置选项阻止这种情况发生吗?
创建的路径的示例可以类似于:
/tmp/tomcat.1185139485157901.8080/work/Tomcat/localhost/_/
SESSIONS.ser
WEB-INF/等等.等.
我在heroku上创建了一个使用imagemagick的nodejs应用程序.我正在做这个操作:
require('child_process').exec(`convert -quiet -delay 1 output.avi ${gif}`);
Run Code Online (Sandbox Code Playgroud)
这应该output.avi(存在)转换为gif文件.在这种情况下,gif是"/app/temp/gifs/xstrycatdq.gif".此命令在我的本地Windows机器上完美运行.因为我使用path模块来获取变量path.join和__dirname.
我已经安装了heroku buildpack:
我收到的错误是:
Command failed: convert -quiet -delay 1 output.avi /app/temp/gifs/xstrycatdq.gif
convert: DelegateFailed `'ffmpeg' -nostdin -v -1 -vframes %S -i '%i' -vcodec pam -an -f rawvideo -y '%u.pam' 2> '%Z'' @ error/delegate.c/InvokeDelegate/1919.
convert: UnableToOpenBlob `magick-93R4VJcemPz0z1.pam': No such file or directory @ error/blob.c/OpenBlob/2705.
convert: NoImagesDefined `/app/temp/gifs/xstrycatdq.gif' @ error/convert.c/ConvertImageCommand/3257.
Run Code Online (Sandbox Code Playgroud)
似乎无法写入/ tmp /目录或任何内容.我也尝试过mkdir /tmp/但bash告诉我这个目录已经存在.
我也试过用环境变量改变imagemagick的临时目录export MAGICK_TMPDIR="temp".
有帮助吗?
编辑:变量现在是绝对的.
我正在使用嵌入式tomcat的Spring Boot,一切正常,我突然得到了错误:
Caused by: org.springframework.boot.context.embedded.EmbeddedServletContainerException: Unable to create tempDir. java.io.tmpdir is set to C:\Windows\
at org.springframework.boot.context.embedded.AbstractEmbeddedServletContainerFactory.createTempDir(AbstractEmbeddedServletContainerFactory.java:183)
at org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory.getEmbeddedServletContainer(TomcatEmbeddedServletContainerFactory.java:165)
at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.createEmbeddedServletContainer(EmbeddedWebApplicationContext.java:164)
at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.onRefresh(EmbeddedWebApplicationContext.java:134)
... 11 common frames omitted
Caused by: java.io.IOException: Access is denied
at java.io.WinNTFileSystem.createFileExclusively(Native Method)
at java.io.File.createTempFile(File.java:2024)
at java.io.File.createTempFile(File.java:2070)
at org.springframework.boot.context.embedded.AbstractEmbeddedServletContainerFactory.createTempDir(AbstractEmbeddedServletContainerFactory.java:174)
... 14 common frames omitted
Run Code Online (Sandbox Code Playgroud)
我没有对用户或系统变量进行任何操作.
我的TEMP 用户变量正在查看C:/ Users/me/AppData/Local/Temp,我猜tomcat必须使用系统1的这个值,实际上是C:/ Windows/Temp
我需要使用tmpHeroku(Cedar)上的文件夹来写一些临时数据,我试着这样做:
open("#{Rails.root}/tmp/#{result['filename']}", 'wb') do |file|
file.write open(image_url).read
end
Run Code Online (Sandbox Code Playgroud)
但这会产生错误
Errno::ENOENT: No such file or directory - /app/tmp/image-2.png
Run Code Online (Sandbox Code Playgroud)
我正在尝试这个代码,它在localhost上正常运行,但我不能让它在Heroku上运行.
将一些文件保存到tmpHeroku(Cedar堆栈)目录的正确方法是什么?
谢谢
编辑: 我正在运行延迟作业的方法,需要访问tmp文件.
编辑2: 我在做什么:
files.each_with_index do |f, index|
unless f.nil?
result = JSON.parse(buffer)
filename = "#{Time.now.to_i.to_s}_#{result['filename']}" # thumbnail name
thumb_filename = "#{Rails.root}/tmp/#{filename}"
image_url = f.file_url+"/convert?rotate=exif"
open("#{Rails.root}/tmp/#{result['filename']}", 'wb') do |file|
file.write open(image_url).read
end
img = Magick::Image.read(image_url).first
target = Magick::Image.new(150, 150) do
self.background_color = 'white'
end
img.resize_to_fit!(150, 150)
target.composite(img, Magick::CenterGravity, Magick::CopyCompositeOp).write(thumb_filename)
key = File.basename(filename)
s3.buckets[bucket_name].objects[key].write(:file => thumb_filename)
# …Run Code Online (Sandbox Code Playgroud) 如何在iPhone或iPad上获取tmp目录?
如果我使用NSTemporaryDirectory()创建一个文件,它不会保存到模拟器临时目录.
编辑1
这个问题涉及MANGOPAY API的用户.我的问题是我无法将API写入该tmp文件夹.
我成功地让API写入http://fakedomain.com/apifolder/blank.txt并获得适当的输出.
然后我跑了剧本http://fake.com/apifolder/demos/iswrite.php上http://fakedomain.com/apifolder/blank.txt有最小的工作代码我可以测试的tmp文件夹中.这是脚本中的代码:
<?php
$filename = 'blank.txt';
echo "<br>";
file_exists($filename);
echo "<br>";
if (file_exists($filename)) {
echo "The file $filename exists";
} else {
echo "The file $filename does not exist";
}
echo "<br>";
if (is_writable($filename)) {
echo 'The file is writable';
} else {
echo 'The file is not writable';
}
?>
Run Code Online (Sandbox Code Playgroud)
它给了我输出
The file blank.txt exists
The file is writable
所以那里都很好.我使用Filezilla创建了以下具有以下权限的文件:
在脚本中http://fake.com/apifolder/demos/iswrite.php我已将filename变量更改为$filename …
我试图在不触及文件系统的情况下运行ImageMagick:从内存/网络读取图像数据,并将其作为blob写回套接字.
但是,ImageMagick不断尝试编写临时文件,这些文件由于测试中止/失败而填满我的测试系统,或者在磁盘速度极慢的系统上引起问题:这是一个奇怪的约束,但我的许多转换主机都是嵌入式系统使用块设备,响应任何操作都非常慢,甚至是stat()s.
问题:
有没有办法配置ImageMagick在图像处理期间不接触磁盘?假设已经加载了ImageMagick将使用的所有必需模块,并且没有任何ImageMagick功能将处理输出到与文件系统通信的子进程用过的.
这样做有什么副作用?我可以处理不适合内存失败的处理,而不是回到磁盘上.
我正在使用C++或Perl ImageMagick API进行转换,而不是convert实用程序.但是,如果另一个绑定支持这一点,我很好地切换平台.
我试过的
MAGICK_TEMPORARY_PATH各种各样的地方,包括/dev/nullPOSIX./dev/null有时似乎工作,但我的目标系统不是POSIX,所以我不确定我是否可以指望它.而不是愚弄临时文件管理系统,我更喜欢我可以信任的东西,首先禁用对临时文件的需求.registry:temporary-path选项,结果相似./dev/null或者不可写的位置)通常会导致在我的程序启动的目录中创建临时文件.如果该目录是不可写的,我已经看到临时文件在系统/tmp目录中创建,即使代码被告知不使用它.这些似乎发生在特殊情况下(例如segfaulting/OOMing/kill -9'd情况),所以我认为通常可以在这些地方创建文件,但通常会清理它们.目标
我正在尝试将zip文件写入python aws lambda的/ tmp文件夹中,因此我可以在压缩之前提取操作,并将其放入s3存储桶中。
问题
Os Errno30只读文件系统
在我的计算机上对该代码进行了本地测试,以确保在将文件上传到AWS之前,该文件将写入我的工作目录。这是我要使用的代码。
file = downloadFile() #This is api call that returns binary zip object
newFile = open('/tmp/myZip.zip','wb')
newFile.write(file)
extractAll('/tmp/myZip.zip')
Run Code Online (Sandbox Code Playgroud)
这是尝试提取zip文件的代码
def extractAll(self,source):
with zipfile.ZipFile(source, 'r') as archive:
archive.extractall()
Run Code Online (Sandbox Code Playgroud)
这是痕迹
[Errno 30] Read-only file system: '/var/task/test-deploy': OSError
Traceback (most recent call last):
File "/var/task/web.py", line 31, in web
performAction(bb, eventBody)
File "/var/task/src/api/web.py", line 42, in performAction
zipHelper.extractAll('/tmp/myZip.zip')
File "/var/task/src/shared/utils/zipfilehelper.py", line 24, in extractAll
archive.extractall()
File "/var/lang/lib/python3.6/zipfile.py", line 1491, in extractall
self.extract(zipinfo, path, pwd)
File …Run Code Online (Sandbox Code Playgroud) tmp ×10
directory ×2
heroku ×2
imagemagick ×2
linux ×2
python ×2
ruby ×2
tomcat ×2
c++ ×1
command-line ×1
errno ×1
filesystems ×1
iphone ×1
lambda ×1
node.js ×1
perl ×1
php ×1
rest ×1
server ×1
spring-boot ×1