2017-01-20 3 views
1

私の既存のアプリケーションログファイルのディレクトリの場所を新しい場所に置くためにカスタム環境変数を渡したいと思っています。環境文字列Python:Windowsでenv変数のUnicodeを処理する方法

のみを含めることができます、以下

# This Works fine if all the characters are ascii 
self.app_log_dir = u'C:\\USERS_CUSTOM_PATCH\\logs\\' 

env['APP_LOG_DIR'] = self.app_log_dir 

    p = Popen(
        cmd, close_fds=False, env=env, stdout=stdout.fileno(), 
        stderr=stderr.fileno(), stdin=stdin.fileno(), 
        creationflags=(CREATE_NEW_PROCESS_GROUP | DETACHED_PROCESS) 
       ) 

p.start() 

############################## 

# But path like this fails 
self.app_log_dir = u'C:\\USERS_CUSTOM_PATCH\\xx_ÔÔ_xx\\logs\\' 
... 
... 
p.start() 

は、

例外は、私はpopenの非ASCIIパス上から受け取った例外で(それはラテン1することができます)ユーザーのロケールに依存します

私のアプリケーションで非ASCIIパスを処理する必要があるので、誰もが回避策を提案できますか?

更新日:

pp_log_dir変数は、ユーザが設定可能であり、私はユニット私のコードをテストし、ユーザーが提供している場合は、ユーザーとして、問題はconfig.pyファイルに

+0

「Unicodeパス」はまったく意味がありません。ディスク上のファイルパス*はバイトでなければなりません。パスがlatin-1の場合は、latin-1でエンコードされたバイトコードを使用してください。 –

+0

@DanielRoseman app_log_dir変数はユーザーが設定することができます。私は自分のコードを単体テストしていて、config.pyファイルに任意のパスを入力できるので問題を発見しました – n33rma

答えて

0

を任意のパスを提供することができたのですユニコードパスを使用して、関連するエンコードにエンコードします。

env['APP_LOG_DIR'] = self.app_log_dir.encode('latin-1') 
+0

これは問題を残します。 'locale.getpreferredencoding'に行きますか? – mkiever

関連する問題