autoexpect - menghasilkan skrip Harapkan dari menonton sesi
autoexpect [ args ] [ program args... ]
autoexpect melihat Anda berinteraksi dengan program lain dan membuat skrip Expect yang mereproduksi interaksi Anda. Untuk skrip garis lurus, harapan otomatis menghemat banyak waktu daripada menulis skrip dengan tangan. Bahkan jika Anda seorang ahli Harapkan, Anda akan merasa nyaman menggunakan harapan otomatis untuk mengotomatiskan bagian interaksi yang lebih tidak masuk akal. Jauh lebih mudah untuk memotong/menempelkan potongan skrip autoexpect secara bersamaan daripada menulisnya dari awal. Dan jika Anda seorang pemula, Anda mungkin bisa lolos dengan mempelajari apa-apa lagi tentang Harapkan daripada cara memanggil harapan otomatis.
Cara termudah untuk menggunakan autoexpect adalah memanggilnya dari baris perintah tanpa argumen. Misalnya:
autoexpect
Secara default, autoexpect memunculkan shell untuk Anda. Diberi nama program dan argumen, autoexpect memunculkan program itu. Misalnya:
autoexpect ftp ftp.cme.nist.gov
Setelah program spawned Anda berjalan, berinteraksilah secara normal. Ketika Anda telah keluar dari shell (atau program yang Anda tentukan), autoexpect akan membuat skrip baru untuk Anda. Secara default, autoexpect menulis skrip baru ke "script.exp". Anda dapat menimpanya dengan flag -f diikuti dengan nama skrip baru.
Contoh berikut menjalankan "ftp ftp.cme.nist.gov" dan menyimpan skrip Harapan yang dihasilkan dalam file "nist".
autoexpect -f nist ftp ftp.cme.nist.gov
Penting untuk dipahami bahwa autoexpect tidak menjamin skrip yang berfungsi karena harus menebak tentang hal-hal tertentu - dan terkadang tebakannya salah. Namun, biasanya sangat mudah untuk mengidentifikasi dan memperbaiki masalah ini. Masalah tipikal adalah:
Pengaturan waktu. Sejumlah besar program (rn, ksh, zsh, telnet, dll.) dan perangkat (misalnya, modem) mengabaikan penekanan tombol yang datang "terlalu cepat" setelah diminta. Jika Anda menemukan skrip baru Anda macet di satu tempat, coba tambahkan tidur singkat tepat sebelum pengiriman sebelumnya.
Anda dapat memaksakan perilaku ini dengan mengganti variabel "force_conservative" di dekat awal skrip yang dibuat. Mode "konservatif" ini membuat autoexpect secara otomatis berhenti sebentar (sepersepuluh detik) sebelum mengirim setiap karakter. Ini menenangkan setiap program yang saya tahu.
Mode konservatif ini berguna jika Anda hanya ingin meyakinkan diri sendiri dengan cepat bahwa masalahnya adalah masalah waktu (atau jika Anda benar-benar tidak peduli dengan seberapa cepat skrip berjalan). Mode yang sama ini dapat dipaksakan sebelum pembuatan skrip dengan menggunakan flag -c.
Untungnya, titik waktu ini jarang terjadi. Misalnya, telnet mengabaikan karakter hanya setelah memasukkan escape sequence-nya. Modem hanya mengabaikan karakter segera setelah menghubungkannya untuk pertama kali. Beberapa program menunjukkan perilaku ini sepanjang waktu tetapi biasanya memiliki tombol untuk menonaktifkannya. Misalnya, flag -T rn menonaktifkan perilaku ini.
Contoh berikut memulai ekspektasi otomatis dalam mode konservatif.
autoexpect -c
Bendera -C menentukan kunci untuk beralih ke mode konservatif. Contoh berikut memulai autoexpect (dalam mode non-konservatif) dengan ^L sebagai toggle. (Perhatikan bahwa ^L dimasukkan secara harfiah - yaitu, masukkan real-control-L).
autoexpect -C ^L
Contoh berikut memulai autoexpect dalam mode konservatif dengan ^L sebagai toggle.
autoexpect -c -C ^L
Bergema. Banyak karakter gema program. Misalnya, jika Anda mengetik "lebih" ke sebuah shell, yang sebenarnya dilihat oleh autoexpect adalah:
you typed 'm',
computer typed 'm',
you typed 'o',
computer typed 'o',
you typed 'r',
computer typed 'r',
...Tanpa pengetahuan khusus tentang program ini, tidak mungkin untuk mengetahui apakah Anda sedang menunggu untuk melihat setiap karakter bergema sebelum mengetik berikutnya. Jika autoexpect melihat karakter yang digemakan, diasumsikan bahwa itu dapat mengirim mereka semua sebagai grup daripada menyisipkannya seperti aslinya. Ini membuat skrip lebih menyenangkan untuk dibaca. Namun, bisa jadi salah jika Anda benar-benar harus menunggu untuk melihat setiap karakter bergema.
Mengubah. Autoexpect merekam setiap karakter dari interaksi dalam skrip. Ini diinginkan karena memberi Anda kemampuan untuk membuat penilaian tentang apa yang penting dan apa yang bisa diganti dengan pencocokan pola.
Di sisi lain, jika Anda menggunakan perintah yang keluarannya berbeda dari satu proses ke proses lainnya, skrip yang dihasilkan tidak akan benar. Misalnya, perintah "tanggal" selalu menghasilkan keluaran yang berbeda. Jadi menggunakan perintah date saat menjalankan autoexpect adalah cara yang pasti untuk menghasilkan skrip yang memerlukan pengeditan agar dapat berfungsi.
Bendera -p menempatkan autoexpect ke "mode cepat". Dalam mode ini, autoexpect hanya akan mencari baris terakhir dari output program - yang biasanya berupa prompt. Ini menangani masalah tanggal (lihat di atas) dan sebagian besar lainnya.
Contoh berikut memulai autoexpect dalam mode prompt.
autoexpect -p
Bendera -P menentukan kunci untuk mengaktifkan mode prompt. Contoh berikut memulai autoexpect (dalam mode non-prompt) dengan ^P sebagai toggle. Perhatikan bahwa ^P dimasukkan secara harfiah - yaitu, masukkan kontrol-P yang sebenarnya.
autoexpect -P ^P
Contoh berikut memulai autoexpect dalam mode prompt dengan ^P sebagai toggle.
autoexpect -p -P ^P
Bendera -quiet menonaktifkan pesan informasional yang dihasilkan oleh autoexpect.
Bendera -Q memberi nama karakter kutipan yang dapat digunakan untuk memasukkan karakter yang akan digunakan secara otomatis karena digunakan sebagai matikan.
Contoh berikut menunjukkan sejumlah flag dengan tanda kutip yang digunakan untuk menyediakan cara memasukkan toggle secara harfiah.
autoexpect -P ^P -C ^L -Q ^Q
Saya tidak tahu apakah ada "gaya" untuk program Harapan tetapi harapan otomatis seharusnya tidak dianggap sebagai model gaya apa pun. Misalnya, autoexpect menggunakan fitur Harapkan yang ditujukan khusus untuk pembuatan skrip yang dihasilkan komputer. Jadi jangan mencoba untuk setia menulis skrip yang muncul seolah-olah dibuat oleh autoexpect. Ini tidak berguna.
Di sisi lain, skrip autoexpect memang menunjukkan beberapa hal yang berharga. Misalnya, Anda dapat melihat bagaimana string apa pun harus dikutip untuk menggunakannya dalam skrip Tcl hanya dengan menjalankan string melalui autoexpect.
"Exploring Expect: A Tcl-Based Toolkit for Automating Interactive Programs" by Don Libes, O'Reilly and Associates, January 1995.
Don Libes, Institut Nasional Standar dan Teknologi
berharap dan berharap otomatis berada dalam domain publik. NIST dan saya akan menghargai kredit jika program ini atau bagiannya digunakan.