Eksekusi proses anak Python berbatas waktu
Jalankan teks Python tepercaya hingga 4096 karakter dalam direktori yang ada dengan batas 50–5000 ms.
import math, os, subprocess, sys
from pathlib import Path
def run_trusted_python(script, seconds, folder):
if type(script) is not str or len(script) > 4096:
raise ValueError("child.script")
if type(seconds) not in (int, float) or not .05 <= seconds <= 5 or not math.isfinite(seconds):
raise ValueError("child.timeout")
if not isinstance(folder, (str, Path)) or not Path(folder).is_dir():
raise ValueError("child.folder")
return subprocess.run([sys.executable, "-I", "-S", "-X", "utf8", "-c", script],
cwd=folder, timeout=seconds, capture_output=True, text=True,
encoding="utf-8", check=False,
creationflags=subprocess.CREATE_NO_WINDOW if os.name == "nt" else 0)| Tinjau sebelum menerapkan | Bandingkan perilaku sebenarnya dengan hasil yang diharapkan. Jika pemeriksaan gagal, cari penyebabnya sebelum membuat perubahan lain. |
|---|---|
| Model | Atur endpoint kompatibel OpenAI atau Anthropic dengan URL dasar dan kunci API jika diperlukan. Uji koneksi. Server model lokal harus berjalan; alat jarak jauh dapat mengirim data secara terpisah. |
| Proyek | Uji Unicode, kegagalan keluar dan penghentian anak langsung, tolak batas salah tanpa menjanjikan isolasi atau pembersihan keturunan. |
import math, os, subprocess, sys
from pathlib import Path
def run_trusted_python(script, seconds, folder):
if type(script) is not str or len(script) > 4096:
raise ValueError("child.script")
if type(seconds) not in (int, float) or not .05 <= seconds <= 5 or not math.isfinite(seconds):
raise ValueError("child.timeout")
if not isinstance(folder, (str, Path)) or not Path(folder).is_dir():
raise ValueError("child.folder")
return subprocess.run([sys.executable, "-I", "-S", "-X", "utf8", "-c", script],
cwd=folder, timeout=seconds, capture_output=True, text=True,
encoding="utf-8", check=False,
creationflags=subprocess.CREATE_NO_WINDOW if os.name == "nt" else 0)Tinjau pembungkus proses dengan mempertahankan batas kepercayaannya
ChildHarbor adalah klien pemrograman AI Windows untuk memeriksa kode pengelolaan proses dalam percakapan proyek. Mulailah dengan menyatakan kode yang dipercaya untuk dijalankan dan hal yang perlu diamati pemanggil. Minta model terhubung memeriksa pembungkus yang ada sebelum menyarankan perubahan agar usulan mempertahankan tujuan dan batasnya.
Tugas konkretnya adalah pembungkus proses anak Python tepercaya dengan direktori kerja yang sudah ada dan batas waktu tertentu. Bahas keluaran Unicode, status keluar gagal, dan apa yang terjadi ketika proses anak langsung melampaui batas waktu. Pisahkan kebutuhan itu dari isolasi keamanan: menerima kode tepercaya untuk dieksekusi tidak menjadikan pembungkus sandbox bagi masukan sembarang.
Tinjau usulan suntingan terhadap kasus uji proses sendiri. Periksa keluaran yang ditangkap, status keluar, dan jalur batas waktu proses anak langsung di lingkungan pengembangan. Jika proses turunan penting, definisikan dan selidiki kebutuhan tambahan itu secara eksplisit. Pengujian batas waktu yang berhasil pada satu anak bukan bukti bahwa seluruh pohon proses dibersihkan, jadi pertahankan pembedaan itu dalam peninjauan.
ChildHarbor mendukung koneksi endpoint yang kompatibel dengan OpenAI atau endpoint Anthropic, dengan kredensial bila diperlukan. Model AI tanpa filter dapat dipilih jika endpoint menyediakannya. Server dan model menentukan konteks, alat tersedia, serta batasan; memilih model tidak memberi izin menjalankan kode tidak tepercaya atau memvalidasi pembungkus usulan.
Pertanyaan sebelum mengubah kode peluncuran proses
Apa yang harus saya jelaskan tentang masukan tepercaya?
Identifikasi siapa yang menyediakan skrip dan mengapa aplikasi mengizinkannya berjalan. Nyatakan asumsi itu secara eksplisit dalam tugas. Jika skrip dapat berasal dari pengguna tidak tepercaya, masalah keamanannya lebih luas daripada menambahkan batas waktu pada pembungkus yang ada.
Apakah batas waktu berarti semua proses turunan dihentikan?
Tidak. Tinjau tepatnya proses yang dikendalikan implementasi dan uji perilaku itu di lingkungan Anda. Jika aplikasi memerlukan pembersihan pohon proses, jadikan kebutuhan eksplisit terpisah dan periksa implementasi khusus platform, bukan menyimpulkannya dari penanganan anak langsung.
Mengapa menguji keluaran Unicode selain status keluar gagal?
Keduanya menguji bagian berbeda dari kontrak pemanggil pembungkus. Sertakan teks harapan dan perilaku keluar agar usulan mempertahankan keduanya. Proses dapat berjalan benar sementara dekode keluaran atau pelaporan kesalahan tetap memberi aplikasi hasil yang tidak dapat digunakan.
Haruskah saya mengeksekusi setiap skrip yang disarankan dalam percakapan?
Tinjau kode dan dampaknya sebelum menjalankan. Percakapan ruang kerja dapat membantu menjelaskan usulan, tetapi keputusan kepercayaan ada pada Anda. Gunakan kasus uji proyek yang sesuai dan jangan menganggap teks buatan model sebagai izin mengeksekusi operasi sembarang.
ChildHarbor · Diperbarui 2026-10-25