2016-09-22 62 views
1

我試圖用下面這段代碼...我無法使用子流程在臨時文件夾中運行文件嗎?

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

,但我得到一個錯誤信息。 有沒有人可以幫助這個?

+2

你能編輯你的問題來顯示錯誤信息嗎?我懷疑這是'USERPROFILE'env變量的非解釋問題,但如果你有這些信息,爲什麼不提供它? –

+0

我們必須猜測你得到了什麼錯誤信息嗎? 「一條錯誤信息」對我們沒有任何幫助。 – cdarke

+0

@cdarke:幸運的是,我知道這個問題,但仍然很煩人......沒有幫助未來讀者的網站上的問題的質量。想想他們! –

回答

2

由於路徑中存在環境變量,因此您可以添加shell=True以強制運行批處理過程,以評估env。變量:

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

請注意保護與報價,因爲有空格。你也可以去掉引號,如果你傳遞一個包含一個元素Popen,這是清潔的列表:

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

交替,如果你只是想激活默認編輯爲您的日誌文件,還有一個更簡單的方法(不阻止執行腳本,所以它的略有不同):

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

相關問題