當前位置: 首頁>>代碼示例>>TypeScript>>正文


TypeScript node-pipe2.pipe2函數代碼示例

本文整理匯總了TypeScript中node-pipe2.pipe2函數的典型用法代碼示例。如果您正苦於以下問題:TypeScript pipe2函數的具體用法?TypeScript pipe2怎麽用?TypeScript pipe2使用的例子?那麽, 這裏精選的函數代碼示例或許可以為您提供幫助。


在下文中一共展示了pipe2函數的2個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的TypeScript代碼示例。

示例1: main

function main(): void {
	'use strict';

	let pathToScript = process.argv[1];
	let args = process.argv.slice(2);
	let waiting = 2;
	let exit = 0;

	function childFinished(err: any, code: number = 0): void {
		if (err && !code)
			code = -1;
		waiting--;
		if (!waiting)
			process.exit(code);
	}

	pipe2((perr: any, rfd: number, wfd: number) => {
		if (perr)
			throw new Error('pipe2 failed: ' + perr);

		let echo = child_process.spawn('/usr/bin/echo', ['hello world'], { stdio: [0, wfd, 2] });
		echo.on('error', (err: any) => {
			process.stderr.write('error: ' + err, () => {
				exit = 1;
				childFinished(err);
			});
		});
		echo.on('exit', (code: number) => {
			childFinished(null, code);
		});

		// XXX: we don't need the wfd at this point, and
		// keeping it open seems to prevent cat from getting
		// an EOF on the pipe?
		fs.close(wfd, () => {
			let cat = child_process.spawn('/usr/bin/cat', [], { stdio: [rfd, 1, 2] });
			cat.on('error', (err: any) => {
				process.stderr.write('error: ' + err, () => {
					childFinished(err);
				});
			});
			cat.on('exit', (code: number) => {
				childFinished(null, code);
			});
			fs.close(rfd);
		});

	});
}
開發者ID:19anand90,項目名稱:browsix,代碼行數:49,代碼來源:pipeline-example.ts

示例2: main

function main(): void {
	'use strict';
	///
	// Note: assumes the statement to be executed is a _string_ in argv[2]
	///
	// get statement
	let argv = process.argv;
	let pathToNode = argv[0];
	let pathToScript = argv[1];
	let args = argv.slice(2);
	if (args.length < 1) {
		let usage = 'usage: ' + path.basename(pathToScript) + ' CMD [ARGS...]\n';
		process.stderr.write(usage, (err: any) => {
			process.exit(1);
		});
		return;
	}
	let statement = args[0];
	//console.log(statement);

	// tokenize statement
	let tokens = tokenize(statement, "|");
	//console.log(tokens);

	// parse tokens into command sequence.
	// do path expansion for commands.
	// raise error if | is not surrounded by
	// commands.
	let parsetree: string[][] = [];
	try {
		parsetree = parse(tokens);
	} catch (e) {
		console.log(e);
		if (e instanceof SyntaxError) {
			process.stderr.write('SyntaxError: a pipe can only be between two commands.\n');
			process.exit(1);
		}
	}

	// check if parse tree is valid
	if (! parsetree_is_valid(parsetree)) {
		process.exit(1);
	}
	// iterate over commands, setup pipes, and execute commands
	let stderr = 2;
	let pids: number[] = [];
	let codes: number[] = [];
	let pipes: number[][] = [];
	let pin = 0;

	// called below
	function spawnChildren(): void {
		for (let i = 0; i < parsetree.length-1; i++) {
			let cmd = parsetree[i];
			let pout = pipes[i][1];
			let opts = {
				// pass our stdin, stdout, stderr to the child
				stdio: [pin, pout, stderr],
			};
			let child = execute_child(cmd, opts, pids, codes);
			fs.close(pipes[i][1]);
			pin = pipes[i][0];
		}
		// execute last command with our stdout
		let cmd = parsetree[parsetree.length-1];
		let opts = {
			// pass our stdin, stdout, stderr to the child
			stdio: [pin, 1, stderr],
		};
		let child = execute_child(cmd, opts, pids, codes);
		for (let i = 0; i < pipes.length; i++) {
			fs.close(pipes[i][0]);
		}
	}

	let outstanding = parsetree.length-1;
	if (!outstanding) {
		spawnChildren();
		return;
	}

	//setup pipes
	for (let i = 0; i < parsetree.length-1; i++) {
		pipe2((err: any, rfd: number, wfd: number) => {
			if (err)
				throw new Error('Pipe failed!');
			pipes.push([rfd, wfd]);
			outstanding--;
			if (!outstanding)
				spawnChildren();
		});
	}
}
開發者ID:ExC0d3,項目名稱:browsix,代碼行數:93,代碼來源:sh.ts


注:本文中的node-pipe2.pipe2函數示例由純淨天空整理自Github/MSDocs等開源代碼及文檔管理平台,相關代碼片段篩選自各路編程大神貢獻的開源項目,源碼版權歸原作者所有,傳播和使用請參考對應項目的License;未經允許,請勿轉載。