Apakah ada cara untuk menjalankan perintah baris perintah melalui Ruby? Saya mencoba membuat program Ruby kecil yang akan memutar dan menerima / mengirim melalui program baris perintah seperti 'screen', 'rcsz', dll.
Akan sangat bagus jika saya bisa mengikat semua ini dengan Ruby (backend MySQL, dll.)
Jawaban:
Iya. Ada beberapa cara:
Sebuah. Gunakan
%x
atau '``:Metode ini akan mengembalikan stdout, dan mengarahkan stderr ke program.
b. Penggunaan
system
:Metode ini kembali
true
jika perintah berhasil. Ini mengarahkan semua output ke program.c. Penggunaan
exec
:Itu menggantikan proses saat ini dengan yang dibuat oleh perintah.
d. (ruby 1.9) gunakan
spawn
:Metode ini tidak menunggu proses untuk keluar dan mengembalikan PID.
e. Penggunaan
IO.popen
:Metode ini akan mengembalikan
IO
objek yang merepresentasikan input / output proses baru. Saat ini juga satu-satunya cara yang saya tahu untuk memberikan masukan program.f. Gunakan
Open3
(pada 1.9.2 dan yang lebih baru)Open3
memiliki beberapa fungsi lain untuk mendapatkan akses eksplisit ke dua aliran keluaran. Ini mirip dengan popen, tetapi memberi Anda akses ke stderr.sumber
io = IO.popen 'cat > out.log', 'r+'
; menulis output perintah ke "out.log"FileUtils
[ ruby-doc.org/stdlib-1.9.3/libdoc/fileutils/rdoc/FileUtils.html] ?Ada beberapa cara untuk menjalankan perintah sistem di Ruby.
Tetapi jika Anda benar-benar perlu melakukan input dan output dengan perintah stdin / stdout, Anda mungkin ingin melihat
IO::popen
metode, yang secara khusus menawarkan fasilitas itu.sumber
sumber
Ya, ini tentu bisa dilakukan tetapi metode penerapannya berbeda-beda, bergantung pada apakah program "baris perintah" yang dimaksud beroperasi dalam mode "Layar penuh" atau baris perintah. Program yang ditulis untuk baris perintah cenderung membaca STDIN dan menulis ke STDOUT. Ini bisa dipanggil langsung di dalam Ruby menggunakan metode backticks standar dan / atau panggilan system / exec.
Jika program beroperasi dalam mode "Layar Penuh" seperti layar atau vi maka pendekatannya harus berbeda. Untuk program seperti ini, Anda harus mencari implementasi Ruby dari pustaka "ekspektasi". Ini akan memungkinkan Anda untuk membuat skrip apa yang Anda harapkan untuk dilihat di layar dan apa yang harus dikirim ketika Anda melihat string tertentu muncul di layar.
Ini tidak mungkin menjadi pendekatan terbaik dan Anda mungkin harus melihat apa yang ingin Anda capai dan menemukan perpustakaan / permata yang relevan untuk melakukannya daripada mencoba mengotomatiskan aplikasi layar penuh yang ada. Sebagai contoh, " Perlu bantuan dengan komunikasi port serial di Ruby " berkaitan dengan komunikasi Port Serial, pra-kursor untuk panggilan jika itu yang ingin Anda capai dengan menggunakan program spesifik yang Anda sebutkan.
sumber
Metode Paling Digunakan Menggunakan di
Open3
sini adalah versi kode saya yang diedit dari kode di atas dengan beberapa koreksi:sumber