node.js同步执行系统命令

JavaScript Node.js

古一LEY

2020-03-24

我需要在node.js函数中

result = execSync('node -v');

它将同步执行给定的命令行并返回该命令文本的所有标准输出。

ps。同步是错误的。我知道。仅供个人使用。

更新

现在我们有了mgutz的解决方案,该解决方案为我们提供了退出代码,但没有stdout!仍在等待更准确的答案。

更新

mgutz更新了他的答案,解决方案在这里:)
另外,正如dgo.a所述,有独立的模块exec-sync

更新2014-07-30

ShellJS库到达。考虑到这是目前的最佳选择。


更新2015-02-10

最后!NodeJS 0.12 execSync本机支持
查看官方文件

第3430篇《node.js同步执行系统命令》来自Winter(https://github.com/aiyld/aiyld.github.io)的站点

3个回答
西里Near 2020.03.24

我习惯于"synchronous"在回调函数的末尾实现东西。不太好,但是可以。如果需要实现一系列命令行执行,则需要包装exec到某些命名函数中并递归调用它。这种模式似乎对我有用:

SeqOfExec(someParam);

function SeqOfExec(somepParam) {
    // some stuff
    // .....
    // .....

    var execStr = "yourExecString";
    child_proc.exec(execStr, function (error, stdout, stderr) {
        if (error != null) {
            if (stdout) {
                throw Error("Smth goes wrong" + error);
            } else {
                // consider that empty stdout causes
                // creation of error object
            }
        }
        // some stuff
        // .....
        // .....

        // you also need some flag which will signal that you 
        // need to end loop
        if (someFlag ) {
            // your synch stuff after all execs
            // here
            // .....
        } else {
            SeqOfExec(someAnotherParam);
        }
    });
};
番长樱梅 2020.03.24

这是不可能的Node.js,都child_process.spawnchild_process.exec从地面建是异步。

有关详细信息,请参见:https : //github.com/ry/node/blob/master/lib/child_process.js

如果您真的想进行此阻止,然后将需要执行的所有操作都放在回调中,或者构建自己的队列以阻止方式进行处理,那么我想您可以将Async.js用于此任务。

或者,如果您有太多时间可以花在Node.js上,请自行修改。

阿飞 2020.03.24

我想补充的是,即使有少数usecases,你应该使用它们,spawnSync/ execFileSync/ execSync添加到node.js的这些提交:https://github.com/joyent/node/compare/d58c206862dc...e8df2676748e

问题类别

JavaScript Ckeditor Python Webpack TypeScript Vue.js React.js ExpressJS KoaJS CSS Node.js HTML Django 单元测试 PHP Asp.net jQuery Bootstrap IOS Android