2015-10-31 2 views
0

Вопрос может быть довольно простым или может не иметь решения. Итак, я прошу Вас любезно помочь мне узнать, как получить доступ к информации о перенаправлении на стандартный вывод out.txtКак получить информацию о stdout-перенаправленном имени файла в скрипте node.js

node do-nothing.js <in.txt> out.txt 

В частности, мне нужно получить доступ к имени файла «out.txt» в сценарии ничегонеделания. js (т.е. accessing process.stdout .______)

Советы: Я уже заметил, что process.stdout._type становится «fs» вместо «tty», применяя перенаправление.

+0

Это невозможно, и вы не должны получать доступ к этой информации, даже если это было возможно. stdout может быть перенаправлен на любой поток (включая tty), не обязательно файл, и это точка. Вы должны рассматривать это как устройство символов только для записи, если вы вообще поддерживаете вывод stdout. – 4ae1e1

+0

@ 4ae1e1 Я понимаю вашу точку зрения, но это имеет решающее значение, если я использую node.js в качестве текстового потока в текстовом потоке с двоичными файлами (я поставил ссылку на абсолютный путь двоичного файла внутри текстового файла) – sfiore

+0

Мне нужно добавить что я ищу функциональность, подобную [ftello] (http://www.gnu.org/software/libc/manual/html_node/File-Positioning.html) в Node.js, прежде чем начинать писать свои собственные модуль. – sfiore

ответ

0

Я получил его. Вот решение, если вы запустили скрипт как node stdout_redirect.js > out.txt && more out.txt, у вас есть искомая информация в переменной d. Спасибо за помощь и надеюсь, что это поможет кому-то другому.

var fs = require('fs'); 

fs.readdir(process.env.PWD,function(err, dir){ 
    var stdout_ino = 0; 
    fs.stat('/dev/stdout',function(err,stats){ 
     stdout_ino = stats.ino; 
    }); 
    dir.forEach(function(d){ 
     fs.stat(d,function(err,stats){ 
      if (stats.ino === stdout_ino) 
      { 
       console.log(d); 
      } 
     }); 
    }); 
}); 
0

Вы можете использовать этот модульhttps: //www.npmjs.com/package/yargs, а затем этот модуль вы назвали https://www.npmjs.com/package/fs с другой стороны, если вам нужно что-то более сложное, вы можете использовать пакет дочерних процессов, чтобы делать то, что вам нужно args и выполнить сценарий bash, который у вас есть, например,

+0

Это неприменимо, потому что я не передаю имя файла как аргументы узла. Результат 'node yargs.js sfiore

+0

Вы правы, это результат узла yargs.js