我有以下要用python编写的shell脚本(当然,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()进程发送字符串,但我不知道如何混合字符串和文件。

最佳答案

p = subprocess.Popen(['grep', '...'], stdin=subprocess.PIPE,
                                      stdout=subprocess.PIPE)
output, output_err = p.communicate(myfile.read())

关于python - 将StringIO用作Popen的stdin,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20568107/

10-12 21:51