OpenSpace reliable-script-execution
Execute Python scripts reliably using file-first approach instead of heredoc
git clone https://github.com/HKUDS/OpenSpace
T=$(mktemp -d) && git clone --depth=1 https://github.com/HKUDS/OpenSpace "$T" && mkdir -p ~/.claude/skills && cp -r "$T/gdpval_bench/skills/reliable-script-execution" ~/.claude/skills/hkuds-openspace-reliable-script-execution && rm -rf "$T"
gdpval_bench/skills/reliable-script-execution/SKILL.mdReliable Script Execution
When executing Python code via shell commands, avoid inline heredoc execution which can fail unpredictably with 'unknown error'. Use this two-step file-first approach for more reliable script execution.
Problem
Direct heredoc Python execution like:
python3 << 'EOF' # complex code here EOF
Can fail with 'unknown error', especially when:
- Script contains multiple lines or complex logic
- Special characters or quotes are present
- Working directory context matters
Solution: File-First Approach
Step 1: Write Python Script to File
Use
write_file to save your Python code to a .py file:
write_file(path="./temp_script.py", content=""" import json data = {"key": "value"} print(json.dumps(data)) """)
Step 2: Execute via Shell
Use
run_shell with explicit working directory:
run_shell(command="python3 ./temp_script.py", timeout=60)
Step 3: Clean Up (Optional)
Remove temporary files after execution:
run_shell(command="rm ./temp_script.py")
Complete Example
Task: Generate a JSON report with calculations
# Step 1: Write the script write_file( path="./generate_report.py", content=""" import json from datetime import datetime revenue = 500000.00 expenses = 379577.06 net_income = revenue - expenses report = { "generated": datetime.now().isoformat(), "revenue": revenue, "expenses": expenses, "net_income": net_income } print(json.dumps(report, indent=2)) """ ) # Step 2: Execute run_shell(command="python3 ./generate_report.py", timeout=60) # Step 3: Clean up run_shell(command="rm ./generate_report.py")
Best Practices
-
Use descriptive filenames: Name scripts according to their purpose (e.g.,
,calculate_pnl.py
)transform_data.py -
Set appropriate timeouts: For data processing scripts, use longer timeouts (60-300 seconds)
-
Specify working directory: If the script depends on relative paths, include
cd /path && python3 script.py -
Handle errors gracefully: Check shell output for errors and retry if needed
-
Clean up temporary files: Don't leave
files cluttering the workspace unless they need to persist.py
When to Use This Pattern
- Executing multi-line Python code via shell
- Scripts with complex string handling or special characters
- When heredoc execution has failed previously
- Any scenario where reliability matters more than brevity
Anti-Pattern to Avoid
Do NOT rely on heredoc for production-critical scripts:
# Unreliable - may fail with 'unknown error' python3 << 'EOF' # Your code here EOF
Use file-first approach instead for consistent, debuggable execution.