Di node.js, saya ingin menemukan cara untuk mendapatkan output dari perintah terminal Unix. Apakah ada cara untuk melakukan ini?
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
sumber
sumber
Jawaban:
Itulah cara saya melakukannya dalam proyek yang saya kerjakan sekarang.
Contoh: Mengambil pengguna git
sumber
stdout
jika ada kesalahan. Semoga deterministik dan terdokumentasi.Anda mencari child_process
Seperti yang ditunjukkan oleh Renato, ada beberapa paket exec sinkron di luar sana sekarang juga, lihat sync-exec yang mungkin lebih sesuai dengan yang Anda cari. Perlu diingat, node.js dirancang untuk menjadi server jaringan berkinerja tinggi berulir tunggal, jadi jika itu yang ingin Anda gunakan, jauhi hal-hal sync-exec kecuali jika Anda hanya menggunakannya selama startup atau sesuatu.
sumber
Sync
metode yang tersedia secara asli, meskipun demikian IMHO itu harus dihindariJika Anda menggunakan node lebih baru dari 7.6 dan Anda tidak menyukai gaya panggilan balik, Anda juga dapat menggunakan
promisify
fungsi node-util denganasync / await
untuk mendapatkan perintah shell yang terbaca dengan rapi. Berikut adalah contoh jawaban yang diterima, menggunakan teknik ini:Ini juga memiliki keuntungan tambahan yaitu mengembalikan janji yang ditolak pada perintah yang gagal, yang dapat ditangani dengan
try / catch
di dalam kode async.sumber
{ stdout: string, stderr: string }
hasil untukawait exec(...)
return { name: name.stdout.trim(), email: email.stdout.trim() }
.Berkat jawaban Renato, saya telah membuat contoh yang sangat mendasar:
Ini hanya akan mencetak nama pengguna git global Anda :)
sumber
Persyaratan
Ini akan membutuhkan Node.js 7 atau yang lebih baru dengan dukungan untuk Promises dan Async / Await.
Larutan
Buat fungsi pembungkus yang memanfaatkan janji untuk mengontrol perilaku
child_process.exec
perintah.Penjelasan
Dengan menggunakan promise dan fungsi asynchronous, Anda bisa meniru perilaku shell yang mengembalikan output, tanpa jatuh ke neraka panggilan balik dan dengan API yang cukup rapi. Dengan menggunakan
await
kata kunci, Anda dapat membuat skrip yang dapat dibaca dengan mudah, namun tetap dapat menyelesaikan pekerjaanchild_process.exec
.Contoh kode
Pemakaian
Output Sampel
Cobalah secara online.
Repl.it .
Sumber daya eksternal
Janji .
child_process.exec
.Node.js dukungan meja .
sumber