W node.js chciałbym znaleźć sposób na uzyskanie danych wyjściowych polecenia terminala systemu Unix. Czy jest na to sposób?
function getCommandOutput(commandString){
// now how can I implement this function?
// getCommandOutput("ls") should print the terminal output of the shell command "ls"
}
node.js
shell
command-line-interface
Anderson Green
źródło
źródło
Odpowiedzi:
Tak właśnie robię w projekcie, nad którym teraz pracuję.
Przykład: pobieranie użytkownika git
źródło
stdout
jeśli wystąpi błąd. Miejmy nadzieję, że deterministyczne i udokumentowane.Szukasz child_process
Jak zauważył Renato, istnieje teraz kilka synchronicznych pakietów exec, zobacz sync-exec, które mogą być bardziej tym, czego szukasz. Pamiętaj jednak, że node.js został zaprojektowany jako jednowątkowy serwer sieciowy o wysokiej wydajności, więc jeśli do tego chcesz go używać, trzymaj się z daleka od rzeczy typu sync-exec, chyba że używasz go tylko podczas uruchamiania lub coś.
źródło
Sync
metody są dostępne natywnie, mimo to IMHO należy ich unikaćJeśli używasz node później niż 7.6 i nie podoba ci się styl wywołania zwrotnego, możesz również użyć funkcji node-util
promisify
z,async / await
aby uzyskać polecenia powłoki, które odczytują czysto. Oto przykład zaakceptowanej odpowiedzi przy użyciu tej techniki:Ma to również dodatkową zaletę w postaci zwracania odrzuconej obietnicy w przypadku nieudanych poleceń, które można obsłużyć
try / catch
wewnątrz kodu asynchronicznego.źródło
{ stdout: string, stderr: string }
wynik naawait exec(...)
return { name: name.stdout.trim(), email: email.stdout.trim() }
.Dzięki odpowiedzi Renato stworzyłem naprawdę podstawowy przykład:
Po prostu wydrukuje twoją globalną nazwę użytkownika git :)
źródło
Wymagania
Będzie to wymagało Node.js 7 lub nowszego z obsługą Promises i Async / Await.
Rozwiązanie
Utwórz funkcję opakowującą, która wykorzystuje obietnice do kontrolowania zachowania
child_process.exec
polecenia.Wyjaśnienie
Korzystając z obietnic i funkcji asynchronicznej, możesz naśladować zachowanie powłoki zwracającej dane wyjściowe, bez popadania w piekło wywołań zwrotnych i za pomocą całkiem zgrabnego interfejsu API. Używając
await
słowa kluczowego, możesz stworzyć skrypt, który łatwo się czyta, a jednocześnie będzie w stanie wykonać pracęchild_process.exec
.Przykład kodu
Stosowanie
Przykładowe wyjście
Wypróbuj online.
Zamień .
Zasoby zewnętrzne
Obietnice .
child_process.exec
.Node.js stół wsparcie .
źródło