是否可以将系统输出放入 javascript 中的 var 中?
Is it possible to put a system output into a var in javascript?
有没有办法将系统 shell 输出的结果放入 var 例如:
exec('echo test', (error, stdout, stderr) => {
if (error) {
console.error(`exec error: ${error}`);
return;
}
console.log(`stdout: ${stdout}`);
});
并将控制台日志输出保存到 var
有几种方法!首先,您应该注意,在上面的示例中,stdout 已经在适当命名的变量中可用:
exec('echo test', (error, stdout, stderr) => {
if (error) {
console.error(`exec error: ${error}`);
return;
}
console.log(`stdout: ${stdout}`); // right here
});
但是,我假设您希望能够在回调之外访问该值。您可以依赖 exec
returns 一个 ChildProcess
的事实,它又暴露了一个表示进程标准输出的可读流:
const subprocess = exec('echo test')
let stdout = "";
subprocess.stdout.on('data', (chunk) => {
stdout += chunk.toString();
});
subprocess.stdout.on('end', () => {
console.log(`stdout: ${stdout}`); // stdout is now complete
});
但您还应该注意,虽然从技术上讲变量可以在回调之外访问,但实际上 就绪 直到另一个回调之后。这是因为 exec
是异步的,所以它的结果同样需要异步访问。
如果这对您的用例造成问题,一种替代方法是使用 execSync
同步执行您的子进程,在这种情况下,您的标准输出只是直接从调用中作为缓冲区返回:
const stdout = execSync('echo test').toString();
有没有办法将系统 shell 输出的结果放入 var 例如:
exec('echo test', (error, stdout, stderr) => {
if (error) {
console.error(`exec error: ${error}`);
return;
}
console.log(`stdout: ${stdout}`);
});
并将控制台日志输出保存到 var
有几种方法!首先,您应该注意,在上面的示例中,stdout 已经在适当命名的变量中可用:
exec('echo test', (error, stdout, stderr) => {
if (error) {
console.error(`exec error: ${error}`);
return;
}
console.log(`stdout: ${stdout}`); // right here
});
但是,我假设您希望能够在回调之外访问该值。您可以依赖 exec
returns 一个 ChildProcess
的事实,它又暴露了一个表示进程标准输出的可读流:
const subprocess = exec('echo test')
let stdout = "";
subprocess.stdout.on('data', (chunk) => {
stdout += chunk.toString();
});
subprocess.stdout.on('end', () => {
console.log(`stdout: ${stdout}`); // stdout is now complete
});
但您还应该注意,虽然从技术上讲变量可以在回调之外访问,但实际上 就绪 直到另一个回调之后。这是因为 exec
是异步的,所以它的结果同样需要异步访问。
如果这对您的用例造成问题,一种替代方法是使用 execSync
同步执行您的子进程,在这种情况下,您的标准输出只是直接从调用中作为缓冲区返回:
const stdout = execSync('echo test').toString();