2017-05-02 12 views
0

が発生します。それは作品TextIOWrapperから読むこと、私はラインでサブプロセスラインを読み取ろうUnicodeDecodeError

proc = subprocess.Popen(self.monitor_logcat_cmd, shell=True, stdout=subprocess.PIPE, 
         bufsize=1, universal_newlines=True) 

while proc.poll() is None: 
    line = proc.stdout.readline() 
    print("Process line: " + str(line)) 

、まだいくつかの点で私はエラーを取得:

Exception in thread Thread-14: 
Traceback (most recent call last): 
    File "/Users/F1sherKK/anaconda3/lib/python3.6/threading.py", line 916, in _bootstrap_inner 
    self.run() 
    File "/Users/F1sherKK/Dev/Python/AutomationTestSupervisor/session/SessionThreads.py", line 46, in run 
    line = proc.stdout.readline() 
    File "/Users/F1sherKK/anaconda3/lib/python3.6/codecs.py", line 321, in decode 
    (result, consumed) = self._buffer_decode(data, self.errors, final) 
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xc0 in position 89: invalid start byte 

を指定/追加する方法はありますサブプロセスの標準出力をエンコードしますか?私は "無視する"エラーを追加したいと思います。

これを修正する方法はありますか?

+0

それでは、プロセスがどのようなバイトを生成し、 'universal_newlines'をオフにしますか?プロセスのエンコーディングが何を生成しているか知っていますか? –

+0

'monitor_logcat_cmd'には正確に何が入っていますか?どのコマンドがシェルで実行されますか? 'LANG'または' LC_CTYPE'環境変数を設定していますか? –

+0

monitor_logcat_cmdは 'adb -s 5554 logcat'です。リアルタイムでAndroidデバイスからログを読み込んでいます。それは私が推測する様々なエンコーディングで構成できます。たとえば、ログに絵文字を入れることができます。私はenv変数を設定しませんでした。 – F1sher

答えて

0

あなただけ'ignore'からPopen()errorsキーワード引数を設定することができます。 documentationから:

If encoding or errors are specified, or universal_newlines is true, the file objects stdin, stdout and stderr will be opened in text mode using the encoding and errors specified in the call or the defaults for io.TextIOWrapper .

しかし、あなたのプロセスは、その出力をエンコードするUTF-8を使用していない明らかです。 a)異なるエンコーディングを生成するように設定できるか、b)エンコーディングが使用されているかを設定してください(キーワード引数をPopen()にする)。

+0

ありがとうございます。私は 'errors =" ignore "'で一時的な解決策を得ました。 PyCharmがこれを使用しようとしたときに "Unexpected argument"エラーを出していたので、私はこれを試していませんでした。それでも動作します。私はこのログのための単一のエンコーディングを設定するのは難しいかもしれないと思う。私はUTF-8でなければならないと思うが、時にはUTF-8でない単一の要素があることがある。私はエキスパートエンコーディングではありませんが、これは私がこれを理解する方法です。私の場合、デバイスから20k行のログを保存する必要があります。そのため、「無視されたエラー」がほとんどない場合、問題が発生するとは思われません。私はさまざまなエンコーディングで実験を行います。ありがとう。 – F1sher

関連する問題