1

Pythons pickle とパイプを使用して、ssh のパイプを介して Unicode 文字列を送信したいと思います。

import subprocess
import pickle

cmd=['ssh', 'user@host', '/usr/bin/env', 'python3', '-c', \
  '"import sys;import pickle;import os;os.mkdir(pickle.Unpickler(sys.stdin).load())"']

p = subprocess.Popen(cmd, stdout=subprocess.PIPE, stdin=subprocess.PIPE)

pickler = pickle.Pickler(p.stdin)

pickler.dump('äöü')

これにより、次のエラーが発生します。

>>> Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "/usr/lib/python3.2/encodings/ascii.py", line 26, in decode
    return codecs.ascii_decode(input, self.errors)[0]
UnicodeDecodeError: 'ascii' codec can't decode byte 0x80 in position 0: ordinal not in range(128)

また、サブプロセスに送信された Unicode 文字が正しく表示されず、代わりに 16 進数表現しか表示されないことにも気付きました。問題の内容とこれを修正する方法を知っている人はいますか?

4

1 に答える 1

0

Pickleはバイナリファイルを必要とし、バイトデータの読み取りと書き込みを行います。プロセス用に作成されたstdin / stdoutsubprocessはバイナリモードですが、sys.stdinはテキストモードです。

上記のコードを使用するようにターゲットコードを変更すると、sys.stdin.buffer正しく機能します。

于 2012-07-02T16:44:09.083 に答える