在Python中跳过糟糕的EOL

时间:2013-11-05 11:32:52

标签: python pipe eol

我正在使用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

2 个答案:

答案 0 :(得分:1)

在这里,试试这个:

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)
                try:
                    msg= ast.literal_eval(data)
                    if  msg['some_string'] == 'some_string' :
                        print msg['status']
                    else :
                        continue
                except SyntaxError:
                    continue #skip this line

except :
        print traceback.format_exc()
        pass
exit()

希望它有所帮助!

答案 1 :(得分:-1)

要跳过错误,您只需编码就像:

try:
    your code
except {Your error}:
    pass

try:
    your code
except:
    pass

表示所有错误

你也可以使用smth:

import sys
import traceback

try:
    {code}
except Exception:
    _type, _value, _trace = sys.exc_info()
    print "Type:\n\t{0}\nException:\n\t\t{1}\nTraceback:\n\t{2}".format(
          _type, _value, traceback.format_tb(_trace))