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
stdin
jika 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