Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 20.09.2013, 08:44
Новичок на форуме
Отправить личное сообщение для povelitelb3000 Посмотреть профиль Найти все сообщения от povelitelb3000
 
Регистрация: 20.09.2013
Сообщений: 8

помогите обойти ошибку ENOENT
привет всем,
при попытке чтения файла с помощью любой графической библиотеки происходит ошибка:
events.js:72
throw er; // Unhandled 'error' event
^
Error: spawn ENOENT
at errnoException (child_process.js:980:11)
at Process.ChildProcess._handle.onexit (child_process.js:771:34)

хотя файл доступен, и несколькими строчками выше он просто загружается в указанный путь "file_path" и выполняется get_file_info:
var gm = require('gm');
var im = require('imagemagick');

function get_file_info(file_path,fn){
    console.log(dump.var_dump_node("file_path1",file_path));
    
    fs.exists(file_path,function(exists){
        console.log(dump.var_dump_node("file_path2["+exists+"]",file_path));
        if(exists)//проверка раз
            setTimeout(function(){
                fs.exists(file_path,function(exists){
                    console.log(dump.var_dump_node("file_path3["+exists+"]",file_path));
                    if(exists) //проверка два (файл в это время нигде не запрашивается и не читается)
                        im.readMetadata(file_path,function (err, data){
                           console.log(dump.var_dump_node("data",data));
                      
                           if(err) return fn(err);
                           fn(null,data);
                        });
                });
            
            },2000);
    },2000);
    
    /***
    gm(file_path)
    .identify(function (err, data){
      console.log(dump.var_dump_node("data",data));
      
      if(err) return fn(err);
      fn(null,data);
    });
    ***/
}

из проводника этот файл нормально открывается и в процессе выполнения скрипта и после..
подскажите пожалуйста что тут не так?
Ответить с цитированием
  #2 (permalink)  
Старый 20.09.2013, 10:28
Интересующийся
Отправить личное сообщение для unl0k Посмотреть профиль Найти все сообщения от unl0k
 
Регистрация: 02.06.2013
Сообщений: 12

Не вдаваясь в подробности, проверки на существование файла не происходит...

Может как-то так попробовать?

function get_file_info(file_path, fn) {
    if (isFile(file_path)) {
        im.readMetadata(file_path, function(err, data) {
           if (err) return fn(err);
           fn(null, data);
        });
    }
}

function isFile(path) {
    try {
        return fs.statSync(path).isFile();
    } catch(ignore) {}
    return false;
}

Последний раз редактировалось unl0k, 20.09.2013 в 10:32.
Ответить с цитированием
  #3 (permalink)  
Старый 20.09.2013, 11:14
Новичок на форуме
Отправить личное сообщение для povelitelb3000 Посмотреть профиль Найти все сообщения от povelitelb3000
 
Регистрация: 20.09.2013
Сообщений: 8

function get_file_info(file_path,fn){
    var b = isFile(file_path);
    if(b) {
        console.log(dump.var_dump_node("isFile",b));
        im.readMetadata(file_path, function(err, data) {
           console.log(dump.var_dump_node("readMetadata call success",1));
           if (err) return fn(err);
           fn(null, data);
        });
        console.log(dump.var_dump_node("readMetadata call end",1));
    }
}

function isFile(path) {
    try {
        return fs.statSync(path).isFile();
    } catch(ignore) {
        console.log(dump.var_dump_node("ignore",ignore));
    }
    return false;
}

пока не помогает (
выдает тоже самое:
isFile = Boolean(true);

readMetadata call end = Number(1);


events.js:72
        throw er; // Unhandled 'error' event
              ^
Error: spawn ENOENT
    at errnoException (child_process.js:980:11)
    at Process.ChildProcess._handle.onexit (child_process.js:771:34)

подскажите может ещё какие нить варианты, как поправить обойти?
Ответить с цитированием
  #4 (permalink)  
Старый 20.09.2013, 11:17
Новичок на форуме
Отправить личное сообщение для povelitelb3000 Посмотреть профиль Найти все сообщения от povelitelb3000
 
Регистрация: 20.09.2013
Сообщений: 8

ошибка именно в этом участке.., т.к. если с 5 по 9 строку заменить на это:
/**
        im.readMetadata(file_path, function(err, data) {
           console.log(dump.var_dump_node("readMetadata call success",1));
           if (err) return fn(err);
           fn(null, data);
        });
        **/
        fn(null, {});

то все нормально работает..
Ответить с цитированием
  #5 (permalink)  
Старый 20.09.2013, 12:19
Интересующийся
Отправить личное сообщение для unl0k Посмотреть профиль Найти все сообщения от unl0k
 
Регистрация: 02.06.2013
Сообщений: 12

Еще, может попробовать дать абсолютный путь file_path в readMetadata()?
Можно полный stack-trace?

Последний раз редактировалось unl0k, 20.09.2013 в 12:28.
Ответить с цитированием
  #6 (permalink)  
Старый 20.09.2013, 12:29
Новичок на форуме
Отправить личное сообщение для povelitelb3000 Посмотреть профиль Найти все сообщения от povelitelb3000
 
Регистрация: 20.09.2013
Сообщений: 8

файл в этой же функции нативными функциями читается нормально:
console.log(dump.var_dump_node("isFile",b));
        fs.readFile(file_path, function (err, data) {
            console.log(dump.var_dump_node("file data.length",data.length));
            if (err) return fn(err);
            fn(null, data.length);
        });

isFile = Boolean(true);

readMetadata call end = Number(1);

file data.length = Number(21282);

видимо проблемы в библиотеках gm и imagemagick
буду искать ещё альтернативы
Ответить с цитированием
  #7 (permalink)  
Старый 20.09.2013, 12:45
Новичок на форуме
Отправить личное сообщение для povelitelb3000 Посмотреть профиль Найти все сообщения от povelitelb3000
 
Регистрация: 20.09.2013
Сообщений: 8

Еще, может попробовать дать абсолютный путь file_path в readMetadata()?

- я итак даю полный путь к файлу.


Можно полный stack-trace?
- а как его сделать? я выкладывал все что получал в консоли
Ответить с цитированием
  #8 (permalink)  
Старый 20.09.2013, 12:49
Интересующийся
Отправить личное сообщение для unl0k Посмотреть профиль Найти все сообщения от unl0k
 
Регистрация: 02.06.2013
Сообщений: 12

Вы правы, и скорее всего косяк в библиотеке. Тесты падают...
Ответить с цитированием
  #9 (permalink)  
Старый 20.09.2013, 15:55
Новичок на форуме
Отправить личное сообщение для povelitelb3000 Посмотреть профиль Найти все сообщения от povelitelb3000
 
Регистрация: 20.09.2013
Сообщений: 8

тесты падают из-за того что все эти библиотеки запускают что то типа:
identify -format %[EXIF:*] "d:\you_file\hehe.jpg"

эта утилита идет в комплекте imagemagick (скачать можно тут http://www.imagemagick.org/script/binary-releases.php)

вообщем 1. скачиваем, 2. устанавливаем, 3. задаем пути к identify от ImageMagick и только тогда запускаем скрипт:
@SET PATH=%PATH%;c:\Program Files\ImageMagick-6.8.6-Q16
@node.exe script.js


а про необходимость наличия imagemagick библиотеки написано в реадми node.js модулях gm и imagemagick,
просто изначально перед установкой нужно внимательно читать readme и не лезть сразу в код если что то не работает (.

кстати не im.readMetadata и не gm.identify у меня так и не заработали(выдают пустые объекты), но зато отлично работает:
im.identify(['-format', '%wx%h', file_path], function(err, output){
	        if (err) throw err;
	        console.log(dump.var_dump_node("im_output",output));
	    });


проблема решена, всем спасибо, добра и удачи

Последний раз редактировалось povelitelb3000, 21.09.2013 в 09:59.
Ответить с цитированием
  #10 (permalink)  
Старый 20.09.2013, 17:19
Новичок на форуме
Отправить личное сообщение для povelitelb3000 Посмотреть профиль Найти все сообщения от povelitelb3000
 
Регистрация: 20.09.2013
Сообщений: 8

удалено

Последний раз редактировалось povelitelb3000, 21.09.2013 в 09:58.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите найти ошибку в простом скрипет Mekasan Общие вопросы Javascript 3 05.08.2013 12:02
Помогите найти ошибку в скрипте alex2396242 Ваши сайты и скрипты 2 17.06.2013 00:51
выбрать и изменить стиль элемента. Помогите найти ошибку nabiullin11 Элементы интерфейса 16 02.09.2011 11:23
Помогите найти ошибку((( hacker_007 Общие вопросы Javascript 5 28.01.2011 17:37
Помогите найти ошибку. boneg Элементы интерфейса 1 21.09.2010 22:20