Piszę Yeoman generator i za pomocą child_process.spawn() (poprzez Yeoman za spawnCommand() - patrz https://github.com/yeoman/generator/blob/master/lib/actions/spawn_command.js)Węzeł Proces dziecko tarło stdout powrocie za nieważną
Mój kod wygląda następująco:
var list = this.spawnCommand('npm', ['list', 'sails'], {stdio: 'pipe'});
list.stdout.on('data', /* callback here that wants to consume the command's output */);
Widzę, że istnieje list.stdio
i że ma on [0,1,2]
jako klucze. Każda z nich ma wartość NULL (lub niezdefiniowaną). Oznacza to, rejestrowanie _.keys(list).join()
wyjściowe ,,
. list.stdout.on()
podaje wyjątek stwierdzający, że stdout
ma wartość null.
Co muszę zrobić, to sprawdzić, czy określone pakiety są zainstalowane i zobaczyć, jaki jest numer wersji. Ale później potrzebuję robić inne rzeczy, gdzie parsuję wyjście komend CLI (na przykład, wynik logu git), więc potrzebuję ogólnego rozwiązania. .spawn()
wydaje się być tym, czego chcę, ale przykłady, które widziałem, wydają się wskazywać, że standardowe wyjście powinno być czymś, co ma metodę .on()
. Na przykład ten podany tutaj: http://nodejs.org/api/child_process.html#child_process_child_process_spawn_command_args_options, gdzie wyświetla się uruchomiony ls -lh /usr
.
Czy brakuje mi czegoś prostego? Zastanawiam się, czy uruchomione polecenie nie zwraca w ogóle żadnego wyjścia, jeśli oznacza to, że standardowe wyjście będzie miało wartość zerową. Jeśli tak jest, to po prostu muszę zidentyfikować polecenia, które mogą nie mieć wyjścia i po prostu sprawdzić, czy stdout nie jest pusty, zanim spróbuję go użyć.
edit faktycznie, wyjście listy poleceń NPM jest wyświetlane w wierszu polecenia, ale po sprawozdaniu z bali używałem do zdiagnozowania problemu (co bym umieścić po wywołaniu .spawnCommand()
i przed wywołaniem .on()
. Ale potrzebuję do niego dostępu w moim kodzie - pokazanie go w wierszu poleceń jest poza tym punktem (poza tym, że daje mi znać, że proces pomyślnie wykonał komendę CLI)
Czy kiedykolwiek dowiedziałeś się, jaka była przyczyna? Teraz też szukam odpowiedzi. – Rondo
Nie tak daleko :(przepraszam – jinglesthula