OpenSpace run-shell-python-file-io
Use run_shell with inline Python for reliable file I/O when execute_code_sandbox cannot access working directory files
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/run-shell-python-file-io" ~/.claude/skills/hkuds-openspace-run-shell-python-file-io && rm -rf "$T"
gdpval_bench/skills/run-shell-python-file-io/SKILL.mdRun Shell Python File I/O
When to Use This Skill
Use this technique when
execute_code_sandbox cannot access files in your working directory, but you need to perform file operations (read, write, transform) as part of your task execution.
The Pattern
Instead of using
execute_code_sandbox, run Python code directly through run_shell with explicit path handling. This provides reliable file I/O capabilities within the task workspace.
How to Apply
Step 1: Identify File Access Needs
Determine which files you need to read from or write to in the working directory.
Step 2: Write Inline Python via run_shell
Construct a Python script that handles your file operations and execute it through
run_shell:
python3 -c " import os # Get the working directory work_dir = os.getcwd() print(f'Working directory: {work_dir}') # Read a file with open('input.txt', 'r') as f: content = f.read() # Process the content processed = content.upper() # Write to output file with open('output.txt', 'w') as f: f.write(processed) print('File operation complete') "
Step 3: Handle Complex Logic
For more complex operations, write a temporary Python script file first:
cat > /tmp/process.py << 'EOF' import os import json work_dir = os.getcwd() # Read input with open('data.json', 'r') as f: data = json.load(f) # Transform result = {k: v * 2 for k, v in data.items()} # Write output with open('result.json', 'w') as f: json.dump(result, f, indent=2) print(f'Processed {len(data)} items') EOF python3 /tmp/process.py
Step 4: Verify File Operations
After execution, verify the files were created/modified correctly:
ls -la cat output.txt
Best Practices
-
Use Absolute or Relative Paths Explicitly: Always specify file paths clearly;
helps confirm your working directory.os.getcwd() -
Handle Errors Gracefully: Add try/except blocks to catch file I/O errors:
try: with open('file.txt', 'r') as f: content = f.read() except FileNotFoundError: print('File not found') -
Use Here-Docs for Complex Scripts: For scripts longer than a few lines, use bash here-documents to avoid escaping issues.
-
Clean Up Temporary Files: If you create temporary scripts, consider removing them after execution.
-
Check Working Directory First: Print
to confirm you're operating in the expected directory.os.getcwd()
Common Use Cases
- Reading configuration files from the workspace
- Writing generated reports or outputs
- Transforming data files (CSV, JSON, XML)
- Batch processing multiple files
- Generating structured documents (PDFs, spreadsheets)
Example: Processing Multiple Files
python3 -c " import os import glob work_dir = os.getcwd() files = glob.glob('*.txt') for f in files: with open(f, 'r') as file: content = file.read() # Process each file with open(f'processed_{f}', 'w') as out: out.write(content.strip().upper()) print(f'Processed {len(files)} files') "
Troubleshooting
| Issue | Solution |
|---|---|
| File not found | Check output; use absolute paths if needed |
| Permission denied | Ensure the directory is writable; avoid protected system paths |
| Encoding errors | Specify encoding explicitly: |
| Multi-line script issues | Use here-doc () instead of for complex scripts |