|
symbol w wierszu poleceń jest nazywany „orurowanie”, bo to jak strumienie danych rurociągowych razem. To, czego potrzebujesz, to pobranie strumieni stdin
(Standard In) i stdout
(Standard Out) dla wykonywanych poleceń.
Na przykład, to jak byś tarło echa polecenie i rurę To wyjście do grep:
var spawn = require('child_process').spawn;
var echo = spawn('echo', ['The quick brown fox\njumped over the lazy dog.']);
var grep = spawn('grep', ['brown']);
echo.stdout.pipe(grep.stdin);
grep.stdout.pipe(process.stdin);
Powyższy przykład ikra zarówno „Echo” i „grep” poleceń. Przetwarza dowolne wyjście ze strumienia echo
procesu na strumień do strumienia . Na koniec przesyłamy strumień grep
procesu stdout
do strumienia macierzystego (proces twojego węzła) stdin
, aby można było zobaczyć wyjście w terminalu.
Na wyjściu pojawi się "Szybki brązowy lis", ponieważ umieszczam znak nowego wiersza w środku, a grep pasuje tylko do pierwszej linii zawierającej "brązowy". Aby uzyskać taki sam wynik, można użyć funkcji exec
. Może być trudniej utrzymać w przyszłości, ale jeśli potrzebujesz tylko szybkiego uruchomienia zestawu poleceń potokowych, możesz wprowadzić pełny ciąg linii komend (w tym symbole potoków) i przekazać go do exec
.
var exec = require('child_process').exec;
var cmdString = 'grep "The quick brown fox\njumped over the lazy dog." | grep "brown"';
exec(cmdString, (err, stdout, stderr) => {
console.log(stdout);
});
Albo zamiast przechodzącą w funkcji zwrotnej może po prostu rura wyjście do process.stdin
jeśli wszystko obchodzi widzi wyjście polecenia.
exec(cmdString).stdout.pipe(process.stdin);
Oto krótki przykład co wierzę Twój kod powinien wyglądać użyciu spawn
. Może wymagać poprawek, ponieważ wydaje się to charakterystyczne dla tego, co robisz.
var keyArgs = [
'-exportcert',
'-storepass','mypass',
'-keypass','mypass',
'-alias','myalias',
'-keystore',"myjey.keystore",
'openssl','sha1',
'-binary',
'openssl','base64',
];
var keyOpts = {
cwd: `${appCreateFolder}/${opt.id}/Certificates`
};
var spawn = require('child_process').spawn;
var keytool = spawn('keytool', keyArgs, keyOpts);
var opensslBinary = spawn('openssl', ['sha1', '-binary']);
var opensslBase64 = spawn('openssl', ['base64']);
keytool.stdout.pipe(opensslBinary.stdin);
opensslBinary.stdout.pipe(opensslBase64.stdin);
opensslBase64.stdout.pipe(process.stdin);
opensslBase64.on('close',() => {
console.log(chalk.cyan('Key created.'));
});
lub używając exec
:
var exec = require('child_process').exec;
var cmdString = 'keytool -exportcert -storepass mypass -keypass mypass -alias myalias -keystore mykey.keystore | openssl sha1 -binary | openssl base64';
var cmdOpts = {
cwd: `${appCreateFolder}/${opt.id}/Certificates`
};
exec(cmdString, cmdOpts,() => {
console.log(chalk.cyan('Key created.'));
});
Czy moja odpowiedź Ci pomogła? – Chev