gpt4 book ai didi

javascript - 在 expressJS 应用程序中,是否可以在脚本执行时实时收集写入控制台的数据?

转载 作者:搜寻专家 更新时间:2023-11-01 00:49:36 24 4
gpt4 key购买 nike

我正在尝试将 bash 脚本的输出输入到 ExpressJS 应用程序中,然后我可以将数据发送到客户端。我在下面创建了一个脚本,它模拟了我将用于我的项目的实际脚本的输出。我希望能够在写入终端时收集这些数据,将其存储在我的 express 应用程序中的一个变量中,然后我可以通过 SSE 或 websocket 发送数据。

n=`expr 10 \* $1`
executionprocessing="processing"
jobdone="done"
sleep 5
echo $executionprocessing
sleep 5
echo $jobdone
echo $n

我目前拥有的:

app.post('/compute', function(req, res) {
shell.exec('sh ./Scripts/mytestscript.sh 10', function(code, stdout, stderr) {
console.log('code:' + code)
console.log('stdout:' + stdout)
})
})

当有post请求时,shellJS会在本地目录执行一个脚本,并将输出写入控制台。问题是,当脚本完成执行时,数据是一次性写入的,而不是数据来了就写入。我希望能够实时与这些数据进行交互。这可能吗?

编辑:子进程是要走的路。这是我为遇到此问题的其他人提供的解决方案。

const child = spawn('sh',['mytestscript.sh','10'],{cwd:'./Scripts'})
child.stdout.on('data', (data) => {
console.log('code:' + data.toString())
});

最佳答案

据我所知,这不能用 ShellJS 完成。但是,应该可以使用 Node 的内置子进程模块。您可以将 sh ./Scripts/mytestscript.sh 10 传递给 spawn ,这将返回一个 ChildProcess目的。该对象的属性之一 stdout 是一个可读流,它流式传输脚本的 stdout。

代码可能看起来像这样:

const { spawn } = require('child_process');

var child = spawn('sh ./Scripts/mytestscript.sh 10');
child.stdout.on('data', (data) => {
// do stuff with data chunk that the script sent to stdout
});

如果您只想将数据直接发送到 websocket,那么也可以只执行 child.stdout.pipe(yourWebsocketSteam);

关于javascript - 在 expressJS 应用程序中,是否可以在脚本执行时实时收集写入控制台的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54070905/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com