2

我正在开发一个 Node.js CLI 脚本,作为其职责的一部分,有时需要从用户那里获取大量输入文本。现在,我只是使用非常基本的readline.prompt(). 我想要一些更好的编辑功能。而不是重新发明轮子,我想我可以做crontab -evisudo做,让脚本启动一个文本编辑器,将数据写入临时文件,并在该文件退出后从该文件中读取。我从 child_process 库中尝试了一些东西,但它们都在后台启动应用程序,并且不让它们控制标准输入或光标。就我而言,我需要一个像 vim 或 nano 这样的应用程序来在运行时占用整个控制台。有没有办法做到这一点,还是我不走运?

注意:这是针对将在单台机器上运行的内部项目,其来源可能永远不会出现。假设没有现有的软件包可以满足我的需求,欢迎使用骇客的变通方法。

4

1 回答 1

4

您是否将 child_process.spawn 的 stdio 选项设置为继承?

这样,子进程将使用与顶级节点进程相同的标准输入和标准输出。

此代码适用于我(节点 v4.3.2):

'use strict';

var fs = require('fs');
var child_process = require('child_process');
var file = '/tmp/node-editor-test';

fs.writeFile(file, "Node Editor", function () {
  var child = child_process.spawn('vim', [file], {stdio: 'inherit'});

  child.on('close', function () {
    fs.readFile(file, 'utf8', function (err, text) {
      console.log('File content is now', text);
    });
  });
});
于 2013-01-13T00:55:42.443 回答