CNode

child_process (子进程) 的stdin管道使用的问题...

问答
MMDZ2发布于9 年前最后回复9 年前1 回复3891 浏览0 收藏
child.stderr.on("data", (data)=> {process.stdout.write(data);});
child.stdout.on("data", (data)=> {process.stdout.write(data);});
var child = spawn('C:\\Python27\\python.exe', {
    stdio: [0,  'pipe',  'pipe']
});

ptyhon默认是进入交互模式,将stdio[0],也就是stdin绑定到主进程的stdin上,stdout和stderr也输出到主进程上 这样就可以像正常的python交互模式一样完美使用,就算输错了也不会退出 但是...问题是... 我想将stdio全部重定向到我的网页上的xterm中,于是stdin必须改成'pipe'

stdio: [ 'pipe',  'pipe',  'pipe']
...
e.on('data',(data)=>{
	child.stdin.write(data);
});

这样改了后,进程创建后不会出现下面

Python 2.7.13 (v2.7.13:a06454b1afa1, Dec 17 2016, 20:53:40) [MSC v.1500 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>>

这样的stderr输出,而且stdin.write(...);后,stderr和stdout都没输出...,不管你stdin怎么输入都没反应 只有当输入错误时才会出现下面的

>>> ! File "", line 1 ! ^ SyntaxError: invalid syntax

但是,这个输出完了后子进程就被关闭了... 想来想去都想不通,子进程的stdin到底是怎么回事, 也就是stdin和shell之间发生了什么?为什么会影响到stdout,stderr...还有不正常的输出和不正常的关闭问题...

查看回复

回复 (1)

E
eggggger#1·9 年前

untitled1.png 类似 node 的机制 py 的 repl 启动时也应该会检测,可以 spawn 的时候加 -m code 参数

参与回复
登录后即可参与回复。登录