【发布时间】:2013-11-05 11:32:51
【问题描述】:
我正在使用subprocess从 Linux 中的 CAT 管道读取数据:
stdout=subprocess.PIPE
所以有些行有 BAD EOL,这是一个巨大的文件,我想跳过这些行并转到下一行。我如何在 Python 中做到这一点?
PS:我总是得到:
SyntaxError: EOL while scanning string literal
并且似乎某些套接字在写入该文件时停止了,因为我在该文件的末尾看到了非常大的空间。不想修,想跳过
这是我的代码:
import sys,os
import subprocess
import traceback
import re
import ast
try :
cat = subprocess.Popen(["hadoop", "dfs", "-cat", "PATH TO FILE"], stdout=subprocess.PIPE)
for data in cat.stdout:
data = re.sub(' +',' ',data)
msg= ast.literal_eval(data)
if msg['some_string'] == 'some_string' :
print msg['status']
else :
continue
except :
print traceback.format_exc()
pass
exit()
所以程序退出前的输出: 许多空格和...
^
SyntaxError:扫描字符串文字时 EOL
【问题讨论】:
-
您的 Python 代码 中有语法错误,而不是在 cat 管道中。
-
请出示您的相关代码。看起来错误来自那里。
-
在
literal_eval之前打印出data,这可能会给我们一个战斗的机会。 -
这个东西甚至在系统文件上,如果你尝试 cat 那个文件,同样的问题会发生,我知道文件本身就是问题,但无论如何我手动设置 EOL 并移动到下一行并继续处理,知道我确定该行之后有数据