child_process (子进程) 的stdin管道使用的问题...
发布于 7 年前 作者 MDZ2 3277 次浏览 来自 问答
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 “<stdin>”, line 1 ! ^ SyntaxError: invalid syntax

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

1 回复

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

回到顶部