<p>当试图在由<code>fileinput.input</code>返回的同一文件的重新打开的实例上循环时,如果<code>fileinput.input</code>返回的上一个实例仍未耗尽或显式关闭,则会引发此错误。因此,不能同时使用<code>fileinput.input</code>的多个实例实例。</p>
<p>来自<a href="http://docs.python.org/2/library/fileinput.html#fileinput.input" rel="noreferrer">^{<cd1>}</a>:</p>
<blockquote>
<p>The instance will be used as global state for the functions of this
module, and is also returned to use during iteration.</p>
</blockquote>
<pre><code>import fileinput
finput = fileinput.input('abc1')
finput.next()
finput = fileinput.input('abc1')
finput.next()
</code></pre>
<p><strong>输出:</strong></p>
<pre><code>Traceback (most recent call last):
File "so.py", line 5, in <module>
finput = fileinput.input('abc1')
File "/usr/lib/python2.7/fileinput.py", line 101, in input
raise RuntimeError, "input() already active"
RuntimeError: input() already active
</code></pre>
<p>您可以使用<a href="http://docs.python.org/2/library/fileinput.html#fileinput.FileInput" rel="noreferrer">^{<cd5>}</a>一次使用多个实例。此代码工作正常:</p>
<pre><code>import fileinput
finput = fileinput.FileInput('abc1')
finput.next()
finput = fileinput.FileInput('abc1')
finput.next()
</code></pre>
<hr/>
<p>注意,正如@Tim Pietzcker在他的回答中已经指出的那样,<code>fileinput</code>实例上的for循环已经一次返回一行(在您的代码中,变量<code>line</code>是实际的行),因此,那里不需要<code>.next</code>调用。在循环中调用<code>.next</code>可能会在文件对象耗尽时引发<code>StopIteration</code>错误。</p>
<pre><code>import fileinput
finput = fileinput.input('abc1')
for line in finput:
print line, #current line returned by the for-loop
print finput.next() #Fetch the next line manually.
</code></pre>