mirror of
https://github.com/HKUDS/OpenSpace.git
synced 2026-09-26 01:14:18 +00:00
94 lines
No EOL
2.6 KiB
Markdown
94 lines
No EOL
2.6 KiB
Markdown
---
|
|
name: python-debug-execution
|
|
description: Debug Python scripts with proper error surfacing and working directory verification
|
|
---
|
|
|
|
# Python Debug Execution Pattern
|
|
|
|
When executing Python scripts that may fail, use this pattern to surface clear error information and diagnose issues effectively.
|
|
|
|
## Core Technique
|
|
|
|
### 1. Execute with Full Error Output
|
|
|
|
Always run Python scripts with stderr redirected to stdout and echo the exit code:
|
|
|
|
```bash
|
|
python3 script.py 2>&1 ; echo Exit code: $?
|
|
```
|
|
|
|
**Why this works:**
|
|
- `2>&1` captures both stdout and stderr, ensuring tracebacks are visible
|
|
- `echo Exit code: $?` reveals the actual exit status for debugging
|
|
- Avoids opaque "command failed" errors that hide the real cause
|
|
|
|
### 2. Verify Working Directory in Script
|
|
|
|
Before any file operations in Python scripts, add working directory verification:
|
|
|
|
```python
|
|
import os
|
|
|
|
# At the start of your script or before file operations
|
|
print(f"Current working directory: {os.getcwd()}")
|
|
|
|
# For debugging, also list directory contents
|
|
print(f"Directory contents: {os.listdir('.')}")
|
|
```
|
|
|
|
**Why this works:**
|
|
- File not found errors often stem from incorrect working directory assumptions
|
|
- Makes path-related failures immediately diagnosable
|
|
- Confirms the execution context matches expectations
|
|
|
|
## Complete Debugging Workflow
|
|
|
|
### Step 1: Add Diagnostic Code to Script
|
|
|
|
```python
|
|
#!/usr/bin/env python3
|
|
import os
|
|
import sys
|
|
|
|
def main():
|
|
# Diagnostic: verify execution context
|
|
print(f"Working directory: {os.getcwd()}")
|
|
print(f"Python version: {sys.version}")
|
|
print(f"Directory listing: {os.listdir('.')}")
|
|
|
|
# Your actual logic here
|
|
# ...
|
|
|
|
if __name__ == "__main__":
|
|
main()
|
|
```
|
|
|
|
### Step 2: Execute with Full Error Capture
|
|
|
|
```bash
|
|
python3 script.py 2>&1 ; echo Exit code: $?
|
|
```
|
|
|
|
### Step 3: Analyze Output
|
|
|
|
Look for:
|
|
- Traceback messages (indicate code errors)
|
|
- Exit code (0 = success, non-zero = failure)
|
|
- Working directory confirmation
|
|
- Missing file/directory errors
|
|
|
|
## Common Failure Patterns
|
|
|
|
| Symptom | Likely Cause | Debug Clue |
|
|
|---------|-------------|------------|
|
|
| FileNotFoundError | Wrong working directory | Check `os.getcwd()` output |
|
|
| ModuleNotFoundError | Missing dependencies | Traceback shows import path |
|
|
| PermissionError | File access issues | Traceback shows file path |
|
|
| Silent failure (exit 0, no output) | Logic bug, not crash | Add print statements |
|
|
|
|
## When to Use This Pattern
|
|
|
|
- Running Python scripts in automated/agent contexts
|
|
- Debugging scripts that interact with files
|
|
- Troubleshooting CI/CD pipeline failures
|
|
- Any scenario where script output may be truncated or hidden |