2016-09-22 22 views
1

私は以下のコードを使用してしようとしていた...サブプロセスを使用して一時フォルダにファイルを実行できませんか?

**subprocess.Popen('%USERPROFILE%\\AppData\\Local\\Temp\\AdobeARM - Copy.log').communicate()** 

が、私はエラーメッセージが表示されました。 誰もこれを助けることができますか?

+2

質問を編集してエラーメッセージを表示できますか?私はそれが 'USERPROFILE' env変数の非解釈の問題だと思っていますが、もしあなたが情報を持っていれば、なぜそれを提供しないのですか? –

+0

あなたはどのようなエラーメッセージを受け取りましたか? 「エラーメッセージ」は何らかの形で私たちを助けません。 – cdarke

+0

@cdarke:幸いにも私は問題を知っていますが、まだ迷惑です...将来の読者のためにサイトの質問の質を助けません。彼らについて考える! –

答えて

2

パスに環境変数があるので、shell=Trueを追加すると、envを評価するバッチプロセスを強制的に実行できます。 vars:

subprocess.Popen('"%USERPROFILE%\\AppData\\Local\\Temp\\AdobeARM - Copy.log"',shell=True).communicate() 

スペースがあるので、引用符で保護してください。しない(交互あなたは自分のログファイル用のデフォルトのエディタをアクティブにする場合

subprocess.Popen(['%USERPROFILE%\\AppData\\Local\\Temp\\AdobeARM - Copy.log'],shell=True).communicate() 

、簡単な方法があります:あなたはきれいですPopenに一つの要素を含むリストを渡す場合にも、引用符をドロップすることができますそれは少し違うので)、実行中のスクリプトをブロック:

p = os.path.join(os.getenv('USERPROFILE'),r"AppData\Local\Temp\AdobeARM - Copy.log") 
os.startfile(p) 

それはあなたが到達しようとしている一時ディレクトリかもしれないので多分それがさらに簡単になります

p = os.path.join(os.getenv('TEMP'),r"AdobeARM - Copy.log") 
os.startfile(p) 
+0

ありがとうございます(平均的なロック)!もちろん、ファイルの – dsgdfg

+1

には書き込みロックがなくてはなりません。しかし、最初のメッセージ(OPによって非公開、悪い質問)は、 'Popen'が'%USERPROFILE% 'を文字通り解釈するためです。 –

+0

'os.getenv()'で '%'文字を使用しないでください。これらはcmdのみで、 'os.getenv(" USERPROFILE ")'と 'os.getenv(" TEMP ")'でなければなりません。 – mata

関連する問題