2016-06-13 3 views
0

Pythonのos.path.expandvars()ヌル/未設定環境変数の扱いを防ぐにはどうすればよいですか? os.pathからos.path.expandvarsの使用時にヌル環境変数から保護する

:非既存の変数へ

不正な変数名と参照は変更されません。

>>> os.path.expandvars('$HOME/stuff') 
'/home/dennis/stuff' 
>>> os.path.expandvars('foo/$UNSET/bar') 
'foo/$UNSET/bar' 
代わりに一緒にそれらすべてを連鎖し、その結果が変更されていないかどうかを確認の私は他のパス処理とは別に、このステップを実行することができる

expanduser()realpath(),normpath()、等)、それはときに通常存在します変数が存在しないので、文字列を解析して変数があるかどうかを調べる必要があります。私は十分に頑強ではない恐れがあります。

この問題は、結果を使用してファイルを作成するときに発生します。私は、ファイル名のリテラル部分として変数名を持つファイルになります。代わりに入力を拒否したい。

+0

は、あなたのアプリケーションがどのような方法にを持っていますどの環境変数が必要なのか知っていますか?最初にそれらをチェックし、欠落しているものを空の文字列に設定することができます。 – Barmar

答えて

2

あなたは変数の補間のために同様のドル記号の構文を使用しstring.Templateを、使用することができますが、何かがそれを残すことではなく、存在しない場合はKeyErrorを発生させます。

import os 
from string import Template 
print(Template('$HOME/stuff').substitute(os.environ)) 
+0

これは素晴らしいことです!シェルの中括弧もサポートしています( '$ {HOME}')。 Windows形式の変数( '%VAR%')はサポートしていませんが、サブクラス化してサポートするようです。 –

関連する問題