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 agar input() 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

  1. Batasi output panjang: python output = output[:2000]

  2. 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