我正在尝试使用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但目录中没有创建文件。 我想知道你是否可以告诉我如何解决这段代码。
谢谢
答案 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