【问题标题】:exec() find all files in directory - Nodejsexec() 查找目录中的所有文件 - Nodejs
【发布时间】:2020-12-10 11:57:36
【问题描述】:

我有一个任务,我有一个 js 文件,我将使用 nodejs 和 exec() 命令列出我所在的当前目录中的所有文件。我不知道当前目录的名称。 如何在js文件中写exec()和ls命令才能获取文件列表?

谁能告诉我要写那段代码吗?

【问题讨论】:

标签: node.js exec


【解决方案1】:

应该没问题。 模块'util'是promisify exec(),让它返回一个promise,然后你等待它,并且可以使用它。

    const util = require('util')
    const exec = util.promisify(require('child_process').exec)
    
    const main = async() => {
            const { stdout, stderr } = await exec('ls', ['a', '-l' ])
            if (stderr) {
                    console.log(stderr)
            }   
            console.log(`the list of files in this directory is: ${stdout}`)
    }
    main()

exec(spawn 和 fork 也是如此)是从主节点进程(母进程)派生的进程(子进程),意味着它们运行在一个并发进程上,与母进程分离。这非常有效,因为他们使用处理器的另一个线程。

在 exec 的情况下,它会打开一个新的终端 (tty) 并在其上运行,因此命令 exec('ls', ['a','-l'}) 正在运行 'ls -l' cmd在一个外壳中(我不知道为什么是'a')。因为这个 exec 子进程正在运行到一个 shell 中,所以可以执行任何 shell 命令:我可以做到 await exec('find . -type f | wc -l') 返回文件数,或者 await exec('cat fileName.js')(在终端打印出 fileName 的内容)返回内容的 fileName.js 到标准输出。

Exec 返回一个带有 (err, stdout, stderr) 的回调,为了让这个 sn-p 更清晰,这里util.promisify() 承诺回调,然后我们可以使用 async/await 或 .then() 。抓住()。 我们也可以这样做:

const util = require('util')
const { exec } = require('child_process')        
const ex = util.promisify(exec)
const main = async() => {
                const { stdout, stderr } = await ex('ls')
                if (stderr)...

事实上,基本上这段代码可以这样写

const { exec } = require('child_process');
exec('ls', (error, stdout, stderr) => {
  if (error) {
          console.error(`exec error: ${error}`);
    return;
  }
  console.log(`stdout: ${stdout}`);
  console.error(`stderr: ${stderr}`);
});

查看 nodejs 文档https://nodejs.org/api/child_process.html#child_process_child_process_exec_command_options_callback

希望对你有帮助

【讨论】:

  • 非常感谢您的回答!您能否详细说明一下这段代码是如何工作的:D 我对此完全陌生。非常感谢!
  • 很高兴,请参阅上一篇文章的编辑。
  • 非常感谢@Jerome!这有很大帮助,而且更基本的代码更容易让我理解。 :D
猜你喜欢
  • 2013-08-07
  • 1970-01-01
  • 1970-01-01
  • 2012-09-16
  • 1970-01-01
  • 2014-08-12
  • 1970-01-01
  • 2010-11-20
  • 1970-01-01
相关资源
最近更新 更多