2

我正在阅读 Linux 中的 CAT 管道,使用subprocess

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

4

2 回答 2

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()

希望能帮助到你!

于 2013-11-05T14:29:16.940 回答
-1

要跳过错误,您可以像这样编写代码:

try:
    your code
except {Your error}:
    pass

或者

try:
    your code
except:
    pass

对于所有错误

你也可以像这样使用:

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))
于 2013-11-05T11:36:31.057 回答