2017-03-07 17 views
1

我試圖使用環境變量將一些祕密傳遞給shell命令。 Popen似乎使用「單引號概念」來逃避參數,所以命令無法獲取變量值。如何獲得Popen中的shell變量值

Python 2.7.1 (r271:86832, Mar 3 2017, 10:25:58) 
[GCC 4.8.5 20150623 (Red Hat 4.8.5-4)] on linux3 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import subprocess 
>>> subprocess.Popen(['echo','$PATH']) 
$PATH 

預期輸出是真正的$ PATH值分別爲 「/ bin中:/ sbin目錄:在/ usr/bin中......」

謝謝!

回答

3

你需要一個殼來評估你行:

subprocess.Popen('echo $PATH', shell=True) 

但如果這是你想要的,然後考慮一下:

print os.getenv('PATH') 
1

如果命令行是從外部來源提交的,則使用shell會很危險,所以請謹慎使用它。

此外,還有一個可選參數來決定啓動命令時shell的位置。

command = 'echo $PATH' 
p = subprocess.Popen(command, shell=True, cwd='./') 
p.communicate() # it would wait until the subprocess is complete.