擅长:python、mysql、java
<p>发生此错误是因为<code>str.rsplit()</code>返回<em>列表</em>,而<code>Popen.communicate()</code>需要一个字符串(或缓冲区)。这样你就可以通过了。在</p>
<p>这就是问题的原因,但我不知道你为什么要分线。<code>rsplit()</code>将在<em>所有</em>空白上拆分,包括空格、制表符等。这真的是您想要的吗?在</p>
<p>此外,此代码将迭代<code>readlines()</code>返回的第一组行。文件的其余部分未处理。您需要一个外部循环来保持工作状态,直到输入文件耗尽为止(可能在调用代码中没有显示)。然后它对每一行输入调用一次<code>Popen</code>,这将是非常低效的。在</p>
<p>我建议您完全用Python处理处理。<code>line.split()[0]</code>有效地提供了所需的数据(文件的第一列),而无需将其传递给awk。逐行迭代可以节省内存。在</p>
<p>也许发电机是更好的解决方案:</p>
<pre><code>def extract_info(file_object):
for line in file_object:
yield line.split()[0]
</code></pre>
<p>然后可以在调用代码中对其进行迭代:</p>
^{pr2}$