モジュールをpython2.7からpython3.4に移植しようとしています。 Python2.7(以下のコード)では、分類子は文字列object(i)を取り、stdoutから読み込んだミリ秒単位で出力を返します。stdinはpython2.7で文字列を取りますが、python3.4でバイトを取るだけです。
しかし、コードをpython3.4に変更すると、stdinはバイトを入力するだけです。
を使用して入力(i)をバイトに変換しますが、出力はstdoutから読み取ることはできません。どうして?
残念ながら私は、Pythonドキュメントからのこの引用ができます可能性がありtweets.annotated.csv.model
class CapClassifier:
def __init__(self, model='%s/data/cap2/tweets.annotated.csv.model' % (BASE_DIR)):
self.capClassifier = subprocess.Popen('%s/python/cap/cap_classify %s/data/cap2/tweets.annotated.csv.model' % (BASE_DIR, BASE_DIR),
shell=True,
stdin=subprocess.PIPE,
stdout=subprocess.PIPE)
self.fe = FeatureExtractor('%s/data/cap2/tweets_cap.vocab' % (BASE_DIR))
def Classify(self, words):
i = "%s\n" % self.fe.Extract(' '.join(words))
self.capClassifier.stdin.write(i)
(features, prediction) = self.capClassifier.stdout.readline().rstrip('\n').split('\t')
return float(prediction)
エラーを返すようにするために
write
-statement後self.capClassifier.stdin.flush()
を追加する必要がありましたが判明:バイトのようなオブジェクトが必要な、ではない「STR ')は現在消えていますが、私はまだstdoutからの出力を得ていません –