CWSANDBOX_API_KEY에 설정된 CoreWeave API 액세스 토큰을 사용합니다. Forge API 키 인증은 시작하기를 참조하세요. CKS 요구 사항은 배치 모드를 참조하세요.
이 가이드에서는 exec() 방법을 사용하여 샌드박스에서 명령어를 실행하는 방법을 설명합니다. 셸 명령어, 스크립트 또는 대화형 인터프리터를 샌드박스 내부에서 실행하고 출력을 캡처하거나 실시간으로 스트림하거나 stdin에 입력을 보내거나 0이 아닌 종료 코드를 처리하는 방법을 제어해야 할 때 사용하세요. 이 가이드는 cwsandbox Python 클라이언트를 이미 사용하는 개발자를 위한 것입니다.
기본 명령어 실행
완료될 때까지 실행되고 캡처한 출력을 반환하는 단일 명령어로 시작하세요.exec() 방법은 Process 핸들을 반환합니다:
결과 조회
exec()는 즉시 반환하므로 명령어를 기다리는 방법을 결정할 수 있습니다. Process 핸들에서 .result()를 호출하여 출력을 기다리십시오:
스트림 출력
.result()로 블로킹하면 명령어가 완료될 때까지 출력을 볼 수 없습니다. 진행 상황을 실시간으로 확인하려면 .result()를 호출하기 전에 process.stdout을 순회하세요:
- 장시간 실행되는 프로세스를 모니터링하세요.
- 출력이 도착하는 대로 처리하세요.
- 진행 표시기를 구현하세요.
stdin으로 입력 스트림
일부 명령어는 실행 중에 stdin에 입력을 작성해야 합니다. 예를 들어 파이프라인, 대화형 인터프리터 또는 EOF까지 읽는 도구가 있습니다.stdin=True로 stdin을 활성화하여 실행 중인 명령어에 입력을 보냅니다:
StreamWriter 메서드
stdin=True일 때, process.stdin은 세 가지 메서드를 가진 StreamWriter입니다:
write(data: bytes): 원시 바이트를 씁니다. 반환값은OperationRef[None]입니다.writeline(text: str): 텍스트를 후행 줄 바꿈과 함께 씁니다(UTF-8로 인코딩). 반환값은OperationRef[None]입니다.close(): EOF를 시그널합니다. 시스템이 먼저 대기 중인 쓰기를 완료합니다. 반환값은OperationRef[None]입니다.
stdin=False(기본값)일 때, process.stdin은 None입니다.
여러 쓰기 전송
닫기 전에 데이터를 점진적으로 전송하세요:stdin을 통해 대화형 Python 실행하기
대화형 인터프리터에 Python 코드를 전달하세요:stdin과 stdout 스트리밍 결합
입력을 전송하면서 출력을 스트림으로 받으세요:EOF에 의존하는 명령어 처리
일부 명령어(예:sort)는 출력을 생성하기 전에 모든 입력을 조회합니다. EOF를 알리려면 stdin을 닫으세요:
비동기 컨텍스트에서 stdin 사용하기
비동기 컨텍스트에서는 각OperationRef를 직접 await하세요.
stdin=False 대신 stdin=True를 사용해야 하는 경우
작업 디렉터리 설정
기본적으로 명령어는 샌드박스의 기본 작업 디렉터리에서 실행됩니다.cwd로 작업 디렉터리를 재정의하세요:
timeout 설정
예상보다 오래 실행되거나 멈출 수 있는 명령어를 중지하려면timeout_seconds로 timeout을 설정하세요:
check로 오류 처리
check 매개변수는 종료 코드가 0이 아닐 때의 오류 처리 동작을 제어합니다:
check=False일 때의 기본 동작
종료 코드와 관계없이 결과를 반환합니다:check=True로 실패 시 예외 발생
non-zero exit 시SandboxExecutionError 예외를 발생시킵니다:
Python 코드 실행
샌드박스는 짧은 한 줄 코드나 인라인으로 전달되는 긴 스크립트 등 Python 코드를 실행하는 데 주로 사용됩니다:순차 실행과 병렬 실행 비교
후속 명령어가 앞선 명령어에 의존하는 경우 순차 실행을 선택하고, 명령어가 서로 독립적이며 여러 샌드박스에서 동시에 실행하려는 경우 병렬 실행을 선택하세요.순서가 중요할 때 명령어를 순차적으로 실행하세요
독립적인 명령어를 병렬로 실행하세요
M개 프로세스 중 N개가 완료될 때까지 대기
cwsandbox.wait()를 사용하여 일부 프로세스가 완료될 때까지 대기하세요:
프로세스 제어
exec() 호출이 반환된 후에도 명령어가 계속 실행되는 경우, 실행을 차단하지 않고 상태를 확인하거나 원하는 방식으로 완료될 때까지 기다릴 수 있습니다. Process 핸들은 모니터링과 제어를 위한 메서드를 제공합니다: