Узел js (‘child_process’).exec не сохраняет файл, созданный в команде

#node.js #child-process

#node.js #дочерний процесс

Вопрос:

Я пытаюсь запустить команду wget через узел js с помощью exec. вот команда, которую я использую в командной строке, которая отлично работает, и все файлы созданы:

 wget -o log.txt --quiet -O temp.txt --keep-session-cookies --save-cookies cookies.txt --no-check-certificate --post-data="email=myemailamp;password=mypassword" https://myhost.com/login
  

файл cookie важен для меня.
В моем коде node js у меня есть следующее:

 var sys = require('sys')

var exec = require('child_process').exec;

function puts(error, stdout, stderr) { sys.puts(stdout) }

exec("wget -o log.txt --quiet -O temp.txt --keep-session-cookies --save-cookies cookies.txt --no-check-certificate --post-data="email=myemailamp;password=mypassword" https://myhost.com/login", puts);
  

код возврата равен 0, но в каталоге не создается файл.
Мне было интересно, не могли бы вы сказать мне, как я могу исправить эту часть моего кода.

Спасибо

Ответ №1:

exec принимает cwd опцию для управления рабочим каталогом, относительно которого запускается процесс. Если он не указан, каталог, в котором node была вызвана команда, будет каталогом по умолчанию.

Рассмотрим следующее:

 var theCWD = process.cwd();
// var theCWD = __dirname; 
exec('...',{
    cwd: theCWD
});
  

process.cwd() получит текущий каталог, из которого выполняется родительский процесс, в то время как локальный модуль __dirname предоставит путь к каталогу скрипта, в котором он находится.

Вы также можете рассмотреть возможность объединения динамического абсолютного пути к файлу в вашей wget команде:

 var theCWD = process.cwd();
exec("wget -o " theCWD "/log.txt --quiet -O " theCWD "/temp.txt ....",puts);
  

Я придумал рабочий пример (выполнение его в окне CentOS):

 [user@host ~]$ node --version
v0.10.26

[user@host ~]$ cat /tmp/wget.js
require('child_process').exec('wget -o log.txt --quiet -O tmp.txt http://wtfismyip.com/text',{cwd:__dirname},console.log);

[user@host ~]$ pwd
/home/user

[user@host ~]$ node /tmp/wget.js
null '' ''

[user@host ~]$ ls -a
.  ..

[user@host ~]$ ls -a /tmp
.  ..  log.txt  tmp.txt  wget.js

[user@host ~]$ cat /tmp/{log,tmp}.txt
127.0.0.1