我有以下要用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/