У меня есть следующая оболочка 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
, но я не знаю, как смешивать обе строки и файлы.