
OpenAI Codex के रनटाइम द्वारा संचालित हल्का, क्रॉस-प्लेटफ़ॉर्म प्रक्रिया सैंडबॉक्सिंग। फ़ाइल, नेटवर्क और क्रेडेंशियल नियंत्रणों के साथ किसी भी कमांड को सैंडबॉक्स करें।
zerobox के लिए Python SDK। फ़ाइल, नेटवर्क और क्रेडेंशियल नियंत्रणों के साथ किसी भी कमांड को सैंडबॉक्स करें।
pip install zerobox
व्हील इंस्टॉल करने से zerobox CLI आपके वातावरण के bin/ में स्थापित हो जाती है और एक Python SDK उपलब्ध होता है।
CLI उपयोग, सीक्रेट अवधारणाओं, संपूर्ण फ़्लैग संदर्भ, प्रदर्शन संख्याओं और प्लेटफ़ॉर्म समर्थन के लिए मुख्य README देखें।
from zerobox import Sandbox
sandbox = Sandbox.create({"allow_write": ["/tmp"]})
print(sandbox.sh("echo hello").text())
कमांड चलाने के तीन तरीके। प्रत्येक एक ShellCommand लौटाता है जिसे आप .text(), .json(), या .output() के साथ समाप्त करते हैं।
name = "world"
sandbox.sh(f"echo hello {name}").text()
data = sandbox.py("import json; print(json.dumps({'sum': 1 + 2}))").json()
sandbox.exec("python3", ["-c", "print('hi')"]).text()
data = sandbox.sh("cat data.json").json()
result = sandbox.sh("exit 42").output()
# CommandOutput(code=42, stdout='', stderr='')
Async अनुप्रयोगों में AsyncSandbox का उपयोग करें ताकि सैंडबॉक्स किए गए सबप्रोसेस की प्रतीक्षा इवेंट लूप को अवरुद्ध न करे। कमांड की संरचना Sandbox के समान है, लेकिन निर्माण और टर्मिनेटर awaited होते हैं।
from zerobox import AsyncSandbox
sandbox = await AsyncSandbox.create({"allow_write": ["/tmp"]})
text = await sandbox.sh("echo hello").text()
data = await sandbox.sh("printf '{\"ok\": true}'").json()
result = await sandbox.exec("python3", ["-c", "print('hi')"]).output()
Async कमांड समान timeout विकल्प स्वीकार करते हैं:
import subprocess
try:
await sandbox.sh("sleep 60").text(timeout=1.0)
except subprocess.TimeoutExpired:
print("cancelled")
गैर-शून्य निकास SandboxCommandError उठाता है:
from zerobox import Sandbox, SandboxCommandError
sandbox = Sandbox.create()
try:
sandbox.sh("exit 1").text()
except SandboxCommandError as e:
print(e.code, e.stderr)
ऐसी API कुंजियाँ पास करें जिन्हें सैंडबॉक्स किया गया प्रोसेस कभी नहीं देखता। प्रॉक्सी वास्तविक मान केवल अनुमोदित होस्टों के लिए प्रतिस्थापित करता है।
import os
from zerobox import Sandbox
sandbox = Sandbox.create({
"secrets": {
"OPENAI_API_KEY": {
"value": os.environ["OPENAI_API_KEY"],
"hosts": ["api.openai.com"],
},
"GITHUB_TOKEN": {
"value": os.environ["GITHUB_TOKEN"],
"hosts": ["api.github.com"],
},
},
})
sandbox.sh('curl -H "Authorization: Bearer $OPENAI_API_KEY" https://api.openai.com/v1/models').text()
प्लेसहोल्डर प्रतिस्थापन कैसे काम करता है, इसके लिए मुख्य README देखें।
फ़ाइलसिस्टम परिवर्तन रिकॉर्ड करें और उन्हें स्वचालित रूप से वापस रोल करें:
sandbox = Sandbox.create({
"allow_write": ["."],
"restore": True,
})
sandbox.sh("npm install").text()
बिना रोल बैक किए रिकॉर्ड करें:
sandbox = Sandbox.create({
"allow_write": ["."],
"snapshot": True,
"snapshot_exclude": ["node_modules"],
})
sandbox.sh("npm install").text()
किसी भी टर्मिनेटर को timeout (सेकंड में) पास करें:
import subprocess
try:
sandbox.sh("sleep 60").text(timeout=1.0)
except subprocess.TimeoutExpired:
print("cancelled")
sandbox = Sandbox.create({
"env": {"NODE_ENV": "production"},
"allow_env": ["PATH", "HOME"],
"deny_env": ["AWS_SECRET_ACCESS_KEY"],
})
डिफ़ॉल्ट रूप से क्या इनहेरिट होता है और CLI समकक्षों के लिए मुख्य README देखें।
Sandbox.create(options) एक SandboxOptions डेटाक्लास या एक सादा dict स्वीकार करता है। सभी फ़ील्ड वैकल्पिक हैं।
अज्ञात dict कुंजियाँ (जैसे गलती से allow_write के बजाय allowWrite) निर्माण के समय TypeError उठाती हैं।
Sandbox.py(code) सैंडबॉक्स के अंदर PATH पर मौजूद जो भी python3 हो उसे चलाता है। यदि आपका सक्रिय इंटरप्रेटर सैंडबॉक्स की पठनीय रूट्स के बाहर रहता है (उदाहरण के लिए ~/.local/share/uv/ के अंतर्गत uv-प्रबंधित Python), तो इसका सहारा लें:
import sys
sandbox = Sandbox.create({"allow_read": [sys.prefix]})
sandbox.exec(sys.executable, ["-c", "print('hi')"]).text()
zerobox)zerobox)Apache-2.0
| विधि | सफल होने पर | गैर-शून्य निकास पर |
|---|
.text() | stdout को स्ट्रिंग के रूप में लौटाता है | SandboxCommandError उठाता है |
.json() | stdout को JSON के रूप में पार्स करता है | SandboxCommandError उठाता है |
.output() | CommandOutput(code, stdout, stderr) लौटाता है | समान रूप लौटाता है, कभी अपवाद नहीं उठाता |
| फ़ील्ड | प्रकार | विवरण |
|---|
profile | str | list[str] | नामित प्रोफ़ाइल। एक सूची बाएं से दाएं मर्ज होती है। डिफ़ॉल्ट "workspace"। |
allow_read / deny_read | list[str] | पठनीय / अवरुद्ध पथ। |
allow_write / deny_write | list[str] | लिखने योग्य / अवरुद्ध पथ। |
allow_net | bool | list[str] | True सभी की अनुमति देता है। एक सूची उन डोमेन तक सीमित करती है। |
deny_net | list[str] | अवरुद्ध डोमेन। |
allow_all | bool | पूर्ण फ़ाइलसिस्टम + नेटवर्क एक्सेस। |
no_sandbox | bool | सैंडबॉक्स को पूरी तरह अक्षम करें। |
strict_sandbox | bool | कमज़ोर आइसोलेशन पर वापस गिरने के बजाय विफल हो जाएँ। |
cwd | str | कार्यशील निर्देशिका। |
env | dict[str, str] | स्पष्ट env वेरिएबल्स। |
allow_env | bool | list[str] | पैरेंट env वेरिएबल्स इनहेरिट करें। |
deny_env | list[str] | अवरुद्ध env वेरिएबल्स। |
snapshot | bool | फ़ाइलसिस्टम परिवर्तन रिकॉर्ड करें। |
restore | bool | निकास के बाद रिकॉर्ड करें और वापस रोल करें। snapshot को निहित करता है। |
snapshot_paths / snapshot_exclude | list[str] | ट्रैक किए गए पथ / बहिष्कृत पैटर्न। |
secrets | dict[str, SecretConfig] | प्रति-होस्ट स्कोप वाले सीक्रेट्स। |
debug | bool | सैंडबॉक्स कॉन्फ़िगरेशन को stderr पर प्रिंट करें। |