#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