Piping Data¶
One of run's most powerful features is seamless integration with Unix pipelines.
Reading from stdin¶
Your code can read from stdin:
Output:
JSON Processing¶
Python¶
echo '{"name":"Ada","age":30}' | run python "
import sys, json
data = json.load(sys.stdin)
print(f\"{data['name']} is {data['age']} years old\")
"
JavaScript¶
echo '{"name":"Ada","age":30}' | run js "
const data = JSON.parse(require('fs').readFileSync(0, 'utf-8'));
console.log(\`\${data.name} is \${data.age} years old\`);
"
Multi-Language Pipelines¶
Chain different languages together:
# Python generates JSON
run python "import json; print(json.dumps({'numbers': [1,2,3,4,5]}))" | \
# JavaScript processes it
run js "
const data = JSON.parse(require('fs').readFileSync(0, 'utf-8'));
const doubled = data.numbers.map(n => n * 2);
console.log(JSON.stringify({doubled}));
" | \
# Python displays it
run python "
import sys, json
result = json.load(sys.stdin)
print('Doubled:', result['doubled'])
"
Output:
Text Processing¶
# Count lines
cat file.txt | run python "import sys; print(len(sys.stdin.readlines()))"
# Extract emails
cat text.txt | run python "
import sys, re
text = sys.stdin.read()
emails = re.findall(r'[\w\.-]+@[\w\.-]+', text)
print('\n'.join(emails))
"
# Convert to uppercase
cat file.txt | run ruby "puts STDIN.read.upcase"
CSV Processing¶
cat data.csv | run python "
import sys, csv
reader = csv.reader(sys.stdin)
for row in reader:
print(','.join(row[:3])) # First 3 columns
"