2011-09-30 3 views
12

サブプロセスを使用してスクリプトを呼び出す必要があるdjangoサイトがあります。私はASCII文字を使用していたときにサブプロセスの呼び出しが動作しますが、私は、UTF-8でエンコードされた引数を発行しようとすると、私はエラーを取得する:Pythonサブプロセスとunicode execv()arg 2は文字列のみを含む必要があります

execv() arg 2 must contain only strings. 

文字列u'Wiadomo\u015b\u0107'はPostgresのDBから来ています。この例では、ポーランド語を使用しています。私が英語の単語を使ってそれを実行するとき、私は問題がありません。

呼び出しは次のようになります。

subprocess.Popen(['/usr/lib/p3web2/src/post_n_campaigns.py', '-c', u'bm01', '-1', u'Twoja', '-2', u'Wiadomo\u015b\u0107', '-3', u'', '-4', u'', '-5', u'', '-6', u'', '-m', u'pl', '-p', 'yes']) 

私はこのケースで文字列を処理するかどうかはわかりません。奇妙なことは、これがPythonインタプリタを通して実行されたときにうまく動作することです。

答えて

17

プログラムが想定しているエンコーディングでUnicode文字列をエンコードする必要があります。あなたが知っている場合、プログラムがUTF-8を期待:あなたはあなたが必要なエンコードがわからない場合は

u'Wiadomo\u015b\u0107'.encode('utf8') 

を、あなたはプラットフォームのデフォルトのエンコーディングを試みることができる:トリックをした

u'Wiadomo\u015b\u0107'.encode() 
+3

おかげで...私はそれが既にエンコードされていると思った... – deecodameeko

関連する問題