擅长:python、mysql、java
<p>您需要将从split返回的列表中的字符串传递给输入:</p>
<pre><code> pOut, _ = p.communicate(input=eachline[0])
</code></pre>
<p>您传递的是<code>line.rsplit()</code>即一个列表,不确定要传递的确切内容,可能需要<code>input=" ".join(eachline)</code>,但不管它是什么,它应该是一个字符串,而不是传递给输入的列表本身。另外,您的awk语法似乎不正确。在</p>
<p>您还可以遍历file对象本身,逐行遍历,避免完全读取行。在</p>
^{pr2}$
<p>所以整个代码应该是:</p>
<pre><code>def extract_info(file_object):
for line in file_object:
eachline = line.rsplit() # removing extra returns
p = Popen(['awk','{print $1}'], stdout=PIPE, stdin=PIPE, stderr=STDOUT)
pOut,_ = p.communicate(input=" ".join(eachline))
print(pOut.decode())
</code></pre>
<p>显然,修复<code>eachline</code>逻辑以执行您期望它做的任何事情。在</p>
<p>另一方面,根本不需要使用awk,您可以使用python完成所有这些工作。在</p>
<pre><code>def extract_info(file_object):
for line in file_object:
eachline = line.split(None, 1)
print(eachline[0])
</code></pre>
<p>或者更简洁地使用map和extended iterable unpacking for python3:</p>
<pre><code>def extract_info(file_object):
for i, *_ in map(str.split, file_object):
print(i)
</code></pre>