Penjelasan Eksekusi Interaktif FLOWER dengan pexpect
Dokumen ini menjelaskan bagaimana sistem eksekusi kode Python interaktif di backend platform FLOWER bekerja, menggunakan modul pexpect.
š Permasalahan
Mengapa program Python tetap berjalan walau input() belum mendapatkan nilai?
ā Jawaban Singkat
Karena backend pexpect telah mengisi fallback "" (string kosong) ketika input dari pengguna tidak mencukupi.
if input_index < len(stdin_lines):
child.sendline(stdin_lines[input_index])
input_index += 1
else:
child.sendline("") # Fallback jika input habis
Ini membuat input() tidak menggantung, dan program tetap berjalan seperti seolah-olah pengguna menekan Enter kosong.
āļø Mekanisme pexpect
Struktur umum backend eksekusi:
child = pexpect.spawn("python3 script.py", encoding="utf-8", timeout=5)
Logika interaksi:
- Cek prompt via
child.expect(...) - Kirim
stdinjika masih tersedia. - Jika tidak, kirim
""sebagai default agarinput()tidak menggantung.
š” Keuntungan Pendekatan Ini
- Aman dan tidak membuat server hang
- Cocok untuk auto-evaluasi kode siswa
- User tidak perlu input manual via terminal
ā ļø Catatan Penting
Jika ingin lebih ketat atau edukatif:
- Tambahkan deteksi jumlah input() vs baris stdin
- Beri peringatan jika input terlalu sedikit
Contoh:
if input_index >= len(stdin_lines):
output += "\nā ļø Input tidak mencukupi untuk seluruh input()."
⨠Rekomendasi Opsional
-
Batasi output panjang:
python output = output[:2000] -
Gabungkan stderr ke stdout:
python child = pexpect.spawn(..., err=pexpect.STDOUT)
ā Kesimpulan
Sistem sudah sangat baik dalam menangani interaktif input:
- pexpect akan menunggu prompt,
- Lalu kirim stdin sesuai urutan,
- Dan fallback ke "" agar program tidak stuck.
Sangat cocok untuk lingkungan pembelajaran FLOWER.
FLOWER Documentation ā Komputrobotika 2025