我尝试从用Typescript编写的nodejs应用程序启动一个PHP Web服务器。必须将PHP进程的stdout / stderr重定向到一个文件,以便使用另一个程序监视它。
我遵循文档here,并编写了以下代码:
import * as child_process from "child_process";
import * as process from "process";
import * as fs from "fs";
let out = fs.openSync("./test.log", "a");
let err = fs.openSync("./test.log", "a");
let proc = child_process.spawn("php -S 0.0.0.0:8080", {cwd: ".", env: process.env, shell: true, stdio: ["ignore", out, err]});
但是文件test.log保持为空。
当我执行一个完成的过程(例如 $ php -i )时,此代码有效,但在其他长时间运行的过程(例如 $ ping )中也可以使用。
我还尝试了其他解决方案...
let proc = child_process.spawn("php", ["-S", "0.0.0.0:8080"], {cwd: ".", env: process.env, shell: false, stdio: ["ignore", out, err]});
let proc = child_process.spawn("php", ["-S 0.0.0.0:8080"], {cwd: ".", env: process.env, shell: true, stdio: ["ignore", out, err]});
...但是他们都不起作用。
我做错了什么? php或我的nodejs代码有问题吗?
谢谢!
答案 0 :(得分:0)
尝试一下:
import * as child_process from "child_process";
import * as process from "process";
import * as fs from "fs";
// let out = fs.openSync("./test.log", "a");
// let err = fs.openSync("./test.log", "a");
let proc = child_process.spawn('php', ['-S', '0.0.0.0:8080']);
proc.on('error', (err) => {
console.log('Failed to start child_process.', err);
});
proc.stdout.on('data', (data) => {
fs.writeFile('./test.log', data, function (err) {
if (err) throw err;
});
});
proc.stderr.on('data', (data) => {
fs.writeFile('./test.err', data, function (err) {
if (err) throw err;
});
如果仍然没有输出或出现错误,请尝试将行更改为:
let proc = child_process.spawn('php' , ['-S', '127.0.0.1:8080']);