У меня есть следующая оболочка script, которую я бы хотел написать в Python (конечно, grep . на самом деле гораздо более сложная команда):
#!/bin/bash
(cat somefile 2>/dev/null || (echo 'somefile not found'; cat logfile)) \
| grep .
Я пробовал это (у которого в любом случае нет эквивалента cat logfile):
#!/usr/bin/env python
import StringIO
import subprocess
try:
myfile = open('somefile')
except:
myfile = StringIO.StringIO('somefile not found')
subprocess.call(['grep', '.'], stdin = myfile)
Но я получаю сообщение об ошибке AttributeError: StringIO instance has no attribute 'fileno'.
Я знаю, что вместо StringIO следует использовать subprocess.communicate(), чтобы отправлять строки в процесс grep, но я не знаю, как смешивать обе строки и файлы.