为了澄清目的,我想看到Node.js与shell / cli运行的确切命令。不幸的是我似乎无法找到...
https://nodejs.org/api/child_process.html#child_process_child_process_spawn_command_args_options
此处返回的对象是一个事件发射器,但此时无法从Nodejs中的事件发射器中嗅探事件。我已尝试data
&,pipe
事件但没有成功。
child_process.spawn
返回的对象包含子对象:stdout
,stdin
,stderr
。有stderr
和stdout
的exmaples用作事件发射器&这些工作正常,但我找不到stdin
...
我知道我可以接受我的输入并对其进行格式化,但这很容易出现失败/不一致的情况,所以我宁愿找到一种方法来嗅探它实际使用的内容。
答案 0 :(得分:0)
这里的问题是stdin是一个只写unix套接字。您可以写入childs stdin,但如果要检测任何格式,则必须在stdout的数据事件中发生。
File "C:\Users\elarrick\Desktop\rtm.py", line 142, in <module>
im = ax.imshow(Z, interpolation='nearest', origin='lower', cmap=cm)
File "C:\Python27\lib\site-packages\matplotlib\__init__.py", line 1855, in inner
return func(ax, *args, **kwargs)
File "C:\Python27\lib\site-packages\matplotlib\axes\_axes.py", line 5487, in imshow
im.set_data(X)
File "C:\Python27\lib\site-packages\matplotlib\image.py", line 653, in set_data
raise TypeError("Invalid dimensions for image data")
TypeError: Invalid dimensions for image data
我希望我能解释一下您的满意吗?如果没有,请举个例子,说明为什么要查看哪些stdin消息正在外部程序上到达。 (如果有办法,那么我怀疑您将得到的只是您写入的相同数据)
答案 1 :(得分:0)
x Init
id time
1 2019-01-01 12:00:00 0.1 2019-01-01
2019-01-02 12:00:00 0.1 2019-01-01
2 2020-02-01 12:00:00 0.9 2020-01-01
2020-01-01 12:00:00 0.1 2020-01-01
上有一个传入数据的事件,称为 stdin
"data"
在各种可能的情况下,您在这里几乎是靠自己的。
我通常会创建一个 process.stdin.on("data", (data) => {} );
,它只是缓冲所有输入并将其转换为适合我的特定用例的事件。
下面是阅读器的最基本示例之一,每次接收到一行文本时都会触发事件。
InputReader
实际上,您可以使用 export class DataReader {
private buffer = "";
constructor(private listener: (err, line: string)=>any ) {
}
processData(data) {
// remove carriage returns, and add data to the buffer.
data = data.toString().replace(/\r/g, '');
this.buffer += data;
// get only the complete data.
const lastNewlineIndex = this.buffer.lastIndexOf('\n');
if (lastNewlineIndex < 0) return;
if (this.listener != null) {
// split data in lines
const completeData = this.buffer.slice(0, lastNewlineIndex);
const lines = completeData.split('\n');
for (const line of lines) {
// notify listener line by line.
this.listener(null, line);
}
}
// remove processed data from the buffer.
this.buffer = this.buffer.slice(lastNewlineIndex + 1);
}
}
或某个 EventEmitter
来调度输出。
Observable