stdin stdout python: как повторно использовать один и тот же входной файл дважды?

Я довольно новичок в Python и даже новее в stdin метод stdout. Тем не менее мне нужно сделать мой сценарий пригодным для использования в командах UNIX, чтобы, например, можно было обрабатывать 2 входных файла одновременно с моим сценарием. Этот скрипт отлично работает с аргументами командной строки:

newlist = []
def f1()
 .... 
def f2(input_file):
  vol_id = sys.argv[3]
  for line in input_file:
  if ... :
    line = line.replace('abc','def')
    line = line.replace('id', 'id'+vol_id)
  ....
  newlist.append(line)
return newlist

def main():
 if len(sys.argv) < 4:
   print 'usage: ./myscript.py [file_in... file_out... volume_id]'
   sys.exit(1)

 else:

    filename = sys.argv[1]
    filename_out = sys.argv[2]


    tree = etree.parse(filename)
    extract(tree)

    input_file = open(filename, 'rU')
    change_class(input_file)

    file_new = open(filename_out, 'w')
    for x in newlist:

        if '\n' in x:                   
           x = x.replace('\n', '')                
        print>>file_new, x

Когда я попытался добавить stdin stdout к нему, у меня сначала возникла проблема с чтением того же самого входного файла, и по этой причине я сделал некоторые изменения, чтобы он действительно был открыт только один раз. Вот мой модифицированный main ():

            filename = sys.argv[1]
            filename_out = sys.argv[2]

            if filename == '-':
               filename = sys.stdin
            else:
                input_file = open(filename, 'rU')


            if filename_out == '-':
                filename_out = sys.stdout
                file_new = filename_out
            else:
                file_new = open(filename_out, 'w')

            input_file = open(filename, 'rU')
            tree = etree.fromstring(input_file)
            extract(tree)

            change_class(input_file)

            for x in newlist:

                if '\n' in x:                   
                   x = x.replace('\n', '')                
                print>>file_new, x

Затем я запустил свой скрипт так:

./myscript.py - - volumeid <inputfile> outputfile

И я получил это сообщение об ошибке:

Traceback (most recent call last):
  File "./myscript.py", line 191, in <module>
    main()
  File "./myscript.py", line 175, in main
    input_file = open(filename, 'rU')
TypeError: coercing to Unicode: need string or buffer, file found

Что я делаю неправильно?

Ответы на вопрос(1)

Ваш ответ на вопрос