由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - node.js child process: 怎样保证1个命令执行完了再执行下一个?
相关主题
请教一个python下面popen的问题请高人解释一下为啥这个输出总是"HELLO-ERR"
同步编程真郁闷一个 perl 的 print 的初级问题
尼玛 callback 真是反人类Python有什么好的方法建two-way pipe?
A question related to pipenode.js multer: Recursive process.nextTick detected
问一个vc++ 2008的问题PyCharm里的Python启动的Process在等待按键,如何继续
how can I get external program's result in C编写支持CGI的web服务器大致原理 (转载)
菜鸟请教个hadoop streaming job 的问题 (转载)asynchronous vs non-blocking
50伪币:请教perl代码差错的问题!多谢啦!看了一下C#的async await
相关话题的讨论汇总
话题: spawn话题: var话题: cmd1话题: cmd2话题: function
进入Programming版参与讨论
1 (共1页)
w*s
发帖数: 7227
1
var spawn = require('child_process').spawn;
// exec 2 commands 1 by 1
var child1 = spawn('cmd1', ['argu1']);
var child2 = spawn('cmd2', ['argu2']);
怎样保证cmd1执行完毕了再执行cmd2 ?
(如果是shell我就这么写,
/home/wds# cmd1 argu1; cmd2 argu2)
上班一天很累啦,求大牛们直接告诉答案。谢谢!
c*********e
发帖数: 16335
2
callback

【在 w*s 的大作中提到】
: var spawn = require('child_process').spawn;
: // exec 2 commands 1 by 1
: var child1 = spawn('cmd1', ['argu1']);
: var child2 = spawn('cmd2', ['argu2']);
: 怎样保证cmd1执行完毕了再执行cmd2 ?
: (如果是shell我就这么写,
: /home/wds# cmd1 argu1; cmd2 argu2)
: 上班一天很累啦,求大牛们直接告诉答案。谢谢!

j*a
发帖数: 14423
3
https://nodejs.org/api/child_process.html#child_process_child_process_exec_
command_options_callback

【在 w*s 的大作中提到】
: var spawn = require('child_process').spawn;
: // exec 2 commands 1 by 1
: var child1 = spawn('cmd1', ['argu1']);
: var child2 = spawn('cmd2', ['argu2']);
: 怎样保证cmd1执行完毕了再执行cmd2 ?
: (如果是shell我就这么写,
: /home/wds# cmd1 argu1; cmd2 argu2)
: 上班一天很累啦,求大牛们直接告诉答案。谢谢!

w*s
发帖数: 7227
4
擦,大牛,谢谢死你了,天热请吃西瓜!

【在 j*a 的大作中提到】
: https://nodejs.org/api/child_process.html#child_process_child_process_exec_
: command_options_callback

z****e
发帖数: 54598
5
恭喜你,朝着callback hell迈出了坚实的一步
w*s
发帖数: 7227
6
那你有啥高招?

【在 z****e 的大作中提到】
: 恭喜你,朝着callback hell迈出了坚实的一步
T**r
发帖数: 7016
7
难道是async?

【在 w*s 的大作中提到】
: 那你有啥高招?
l**********n
发帖数: 8443
w*s
发帖数: 7227
9
如果bash里是3个cmd, 这就得2层callback了吧?
算了,我还是把它放python里,让node直接call python ...

【在 j*a 的大作中提到】
: https://nodejs.org/api/child_process.html#child_process_child_process_exec_
: command_options_callback

n*****t
发帖数: 22014
10
async waterfall

【在 w*s 的大作中提到】
: 如果bash里是3个cmd, 这就得2层callback了吧?
: 算了,我还是把它放python里,让node直接call python ...

相关主题
how can I get external program's result in C请高人解释一下为啥这个输出总是"HELLO-ERR"
菜鸟请教个hadoop streaming job 的问题 (转载)一个 perl 的 print 的初级问题
50伪币:请教perl代码差错的问题!多谢啦!Python有什么好的方法建two-way pipe?
进入Programming版参与讨论
z****e
发帖数: 54598
11

对的,异步的一个害处就是在同步看来先后顺序很清晰简单的编码
到了异步的时候,为了non-block,就会变得很蛋疼,所以需要worker
worker就是同步的,就类似你这里的python,大多数python代码都是同步的

【在 w*s 的大作中提到】
: 如果bash里是3个cmd, 这就得2层callback了吧?
: 算了,我还是把它放python里,让node直接call python ...

B****g
发帖数: 83
12
// ================================================
var spawn = require('child_process').spawn;
var async = require('async');
function spawnFunc(options, cb) {
var child = spawn(options.cmd, options.args, function);
var result = '';
child.stdout.on('data', function (data) {
// do some stuff with stdout data
result += data;
});
child.stderr.on('data', function (data) {
// do some stuff with stderr data
});
child.on('close', function (code) {
// error
if (code !== 0) {
cb('ps process exited with code ' + code);
return;
}
// success
cb(null, result);
});
}
function run() {
var commands = [{
cmd: 'cmd1',
args: ['args1']
}, {
cmd: 'cmd2',
args: ['args2']
}];
async.mapSeries(commands, spawnFunc, function (err, results) {
if (err) {
throw err;
}
// handler results
});
}
run();
// ================================================
Or you can use async.series, async.waterfall
Another option is to use defer chain with bluebird or Q
PS: If you only need to get the final stdout, and don't need to read every
line of the stdout, exec might be a better option than spawn

【在 w*s 的大作中提到】
: var spawn = require('child_process').spawn;
: // exec 2 commands 1 by 1
: var child1 = spawn('cmd1', ['argu1']);
: var child2 = spawn('cmd2', ['argu2']);
: 怎样保证cmd1执行完毕了再执行cmd2 ?
: (如果是shell我就这么写,
: /home/wds# cmd1 argu1; cmd2 argu2)
: 上班一天很累啦,求大牛们直接告诉答案。谢谢!

w*s
发帖数: 7227
13
谢谢各位兄弟。
我有个傻问题,这情况为什么要用async,为什么不直接调python ?

【在 B****g 的大作中提到】
: // ================================================
: var spawn = require('child_process').spawn;
: var async = require('async');
: function spawnFunc(options, cb) {
: var child = spawn(options.cmd, options.args, function);
: var result = '';
: child.stdout.on('data', function (data) {
: // do some stuff with stdout data
: result += data;
: });

p*****2
发帖数: 21240
14

用个循环也行吧?

【在 w*s 的大作中提到】
: 如果bash里是3个cmd, 这就得2层callback了吧?
: 算了,我还是把它放python里,让node直接call python ...

B****g
发帖数: 83
15
errr。。。。不清楚你的问题
这要看你的command是啥。如果是一般的bash command,比如grep,或者ffmpeg,
imagemagick,你直接用node就可以了吧。
async的好处是可以很清楚排列你的tasks的先后顺序,不会有callback hell。比如你
要打开100个文件,你就可以把这文件的path放在一个array里,然后用async.map
如果你是要调用python function,当然要用python

【在 w*s 的大作中提到】
: 谢谢各位兄弟。
: 我有个傻问题,这情况为什么要用async,为什么不直接调python ?

w*s
发帖数: 7227
16
我的2个command:
stop service
start service
放循环能确保stop service完全结束再start service吗?不是很熟悉node的技巧的

【在 p*****2 的大作中提到】
:
: 用个循环也行吧?

w*s
发帖数: 7227
17
我觉得全放python里,直接从node调最简单,不知道理解对不对

【在 B****g 的大作中提到】
: errr。。。。不清楚你的问题
: 这要看你的command是啥。如果是一般的bash command,比如grep,或者ffmpeg,
: imagemagick,你直接用node就可以了吧。
: async的好处是可以很清楚排列你的tasks的先后顺序,不会有callback hell。比如你
: 要打开100个文件,你就可以把这文件的path放在一个array里,然后用async.map
: 如果你是要调用python function,当然要用python

p*****2
发帖数: 21240
18
两个你做个restartservice函数就行了
callback并不可怕

【在 w*s 的大作中提到】
: 我的2个command:
: stop service
: start service
: 放循环能确保stop service完全结束再start service吗?不是很熟悉node的技巧的

k****i
发帖数: 101
19
require! <[ child_process deasync ]>
exec-sync = deasync child_process.exec
exec-sync 'sleep 5'
console.log 'time up'

【在 w*s 的大作中提到】
: var spawn = require('child_process').spawn;
: // exec 2 commands 1 by 1
: var child1 = spawn('cmd1', ['argu1']);
: var child2 = spawn('cmd2', ['argu2']);
: 怎样保证cmd1执行完毕了再执行cmd2 ?
: (如果是shell我就这么写,
: /home/wds# cmd1 argu1; cmd2 argu2)
: 上班一天很累啦,求大牛们直接告诉答案。谢谢!

ET
发帖数: 10701
20
promise

【在 w*s 的大作中提到】
: var spawn = require('child_process').spawn;
: // exec 2 commands 1 by 1
: var child1 = spawn('cmd1', ['argu1']);
: var child2 = spawn('cmd2', ['argu2']);
: 怎样保证cmd1执行完毕了再执行cmd2 ?
: (如果是shell我就这么写,
: /home/wds# cmd1 argu1; cmd2 argu2)
: 上班一天很累啦,求大牛们直接告诉答案。谢谢!

1 (共1页)
进入Programming版参与讨论
相关主题
看了一下C#的async await问一个vc++ 2008的问题
学了这么多语言发现还是coffeescript最好用how can I get external program's result in C
看看大牛们为什么都远离.net菜鸟请教个hadoop streaming job 的问题 (转载)
这年头async IO成了流行了50伪币:请教perl代码差错的问题!多谢啦!
请教一个python下面popen的问题请高人解释一下为啥这个输出总是"HELLO-ERR"
同步编程真郁闷一个 perl 的 print 的初级问题
尼玛 callback 真是反人类Python有什么好的方法建two-way pipe?
A question related to pipenode.js multer: Recursive process.nextTick detected
相关话题的讨论汇总
话题: spawn话题: var话题: cmd1话题: cmd2话题: function