我正在使用为节点包装pandoc
的库。但我无法弄清楚如何将STDIN传递给子进程`execFile ...
var execFile = require('child_process').execFile;
var optipng = require('pandoc-bin').path;
// STDIN SHOULD GO HERE!
execFile(optipng, ['--from=markdown', '--to=html'], function (err, stdout, stderr) {
console.log(err);
console.log(stdout);
console.log(stderr);
});
在CLI上它看起来像这样:
echo "# Hello World" | pandoc -f markdown -t html
更新1
尝试使用spawn
:
var cp = require('child_process');
var optipng = require('pandoc-bin').path;
var child = cp.spawn(optipng, ['--from=markdown', '--to=html'], { stdio: [ 0, 'pipe', 'pipe' ] });
child.stdin.write('# HELLO');
// then what?
答案 0 :(得分:8)
与spawn()
一样,execFile()
也会返回ChildProcess
个实例,该实例具有stdin
可写流。
作为使用write()
并聆听data
事件的替代方法,您可以创建readable stream,push()
输入数据,然后pipe()
它到<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="wrapper">
<button class="add_ingredient">Add Ingredient</button>
</div>
:
child.stdin
答案 1 :(得分:6)
以下是我如何使用它:
var cp = require('child_process');
var optipng = require('pandoc-bin').path; //This is a path to a command
var child = cp.spawn(optipng, ['--from=markdown', '--to=html']); //the array is the arguments
child.stdin.write('# HELLO'); //my command takes a markdown string...
child.stdout.on('data', function (data) {
console.log('stdout: ' + data);
});
child.stdin.end();
答案 2 :(得分:1)
我不确定是否可以STDIN
根据这些docs使用child_process.execFile()
以及下面的摘录,看起来仅适用于child_process.spawn()
child_process.execFile()函数类似于child_process.exec(),但它不会生成shell。相反,指定的可执行文件直接作为新进程生成,使其比child_process.exec()稍微更高效。
答案 3 :(得分:0)
如果您正在使用同步方法(execFileSync
,execSync
或spawnSync
),则可以使用input
传递字符串作为stdin 输入选项。像这样:
const child_process = require("child_process");
const str = "some string";
const result = child_process.spawnSync("somecommand", ["arg1", "arg2"], { input: str });