节点js('child_process')。exec不保存在命令中创建的文件

时间:2014-06-17 16:13:52

标签: node.js child-process

我正在尝试使用exec通过节点js运行wget命令。 这是我在命令提示符中使用的命令,它完美地工作并且创建了所有文件:

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

cookie文件对我很重要。 在我的节点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=myemail&password=mypassword\" https://myhost.com/login", puts);

返回代码为0但目录中没有创建文件。 我想知道你是否可以告诉我如何解决这段代码。

谢谢

1 个答案:

答案 0 :(得分:2)

exec接受cwd选项来控制进程相对于该工作目录生成的工作目录。如果未指定,则调用node命令的目录将是默认目录。

请考虑以下事项:

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

process.cwd()将获取正在执行父进程的当前目录,而module-local __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