Câu hỏi Làm cách nào để truy cập các biến môi trường từ Python?


Tôi thiết lập một biến môi trường mà tôi muốn truy cập trong ứng dụng Python của mình. Làm thế nào để tôi có được giá trị này?


1280
2018-02-05 13:03


gốc




Các câu trả lời:


Biến môi trường được truy cập thông qua os.environ

import os
print(os.environ['HOME'])

Hoặc bạn có thể thấy danh sách tất cả các biến môi trường sử dụng:

os.environ

Đôi khi bạn có thể cần xem danh sách đầy đủ!

# using get will return `None` if a key is not present rather than raise a `KeyError`
print(os.environ.get('KEY_THAT_MIGHT_EXIST'))

# os.getenv is equivalent, and can also give a default value instead of `None`
print(os.getenv('KEY_THAT_MIGHT_EXIST', default_value))

Cài đặt mặc định Python trên Windows là C:\Python. Nếu bạn muốn tìm hiểu trong khi chạy python bạn có thể làm:

import sys
print(sys.prefix)

1951
2018-02-05 13:18



hello rod, cảm ơn bạn đã trả lời hiệu quả liên quan đến 'cài đặt mặc định'; có hiệu quả trong quan điểm để hiểu nó một cách nhanh chóng hơn là đi qua các liên kết. Đó là thực sự tôi đánh giá cao :) nhưng về (1) câu hỏi của tôi xin vui lòng xem đoạn mã lệnh và kết quả đầu ra dưới đây: >>> import os >>> print os.environ ['PYTHONPATH'] Traceback (cuộc gọi gần đây nhất): File " <console> ", dòng 1, trong <module> Tệp" C: \ Python25 \ lib \ os.py ", dòng 435, trong getitem     return self.data [key.upper ()] KeyError: 'PYTHONPATH' >>> in os.environ.get ('PYTHONPATH') Không có >>> // PLZ để được tiếp tục ... // - Amit Yadav
Trong một kịch bản 1 cách là ném ngoại lệ trong khi với một trong 2 cho Không. Vì vậy, có cách nào để có được nó có giá trị có ý nghĩa hoặc tôi đang làm một cách sai? Amit. - Amit Yadav
os.environ là một từ điển. Cố gắng truy cập một khóa không có trong từ điển sẽ ném một KeyError. Phương thức get chỉ trả về None khi khóa không tồn tại. Bạn đã đặt PYTHONPATH chưa? Bạn có thể thử với một biến như PATH, được đảm bảo tồn tại không? Liệu nó có trả về một giá trị có ý nghĩa? - Rod
PYTHONPATH được sử dụng để thêm đường dẫn tìm kiếm mới vào Python (sys.path) từ bên ngoài Python. Hãy xem docs.python.org/using/cmdline.html#environment-variables - Rod
Thực ra, os.environ, là từ điển, cũng có thể trả lại giá trị bằng cách sử dụng get phương pháp sử dụng os.environ.get("SOME_PARAMETER", "default_value") - sheba


Để kiểm tra xem khóa có tồn tại hay không (trả về True/False)

"HOME" in os.environ

hoặc (loại bỏ từ python 3.x)

os.environ.has_key("HOME")

Bạn cũng có thể dùng get() khi in khóa; hữu ích nếu bạn muốn sử dụng mặc định.     (cho trăn 2.7.3)

print os.environ.get('HOME','/home/username/')

Ở đâu /home/username/ là mặc định


131
2017-07-12 08:14



Bạn nên sử dụng in thay vì has_key. Xem stackoverflow.com/questions/1323410/has-key-or-in Ngoài ra, default tên kwarg có thể được bỏ qua cho ngắn gọn (os.environ.get('HOME', '/home/username')). - Danilo Bargen
Cái nào tốt hơn, "HOME" in os.environ hoặc là os.environ.get('HOME')? - endolith
@endolith Họ làm những việc khác nhau. Giá trị trả về đầu tiên là True hoặc False, trong khi giá trị thứ hai trả về một giá trị, có thể là None. - Trenton


Câu hỏi ban đầu (phần đầu tiên) là "cách kiểm tra các biến môi trường trong Python".

Dưới đây là cách kiểm tra xem $ FOO có được đặt hay không:

try:  
   os.environ["FOO"]
except KeyError: 
   print "Please set the environment variable FOO"
   sys.exit(1)

33
2018-03-29 13:58



"FOO" trong os.environ - ealfonso
Thử có thể nhanh hơn. Trường hợp của env vars có thể là tốt nhất cho 'try': stackoverflow.com/a/1835844/187769 - RandomInsano
@RandomInsano nhanh hơn = / = tốt hơn. Mã này có vẻ ít đọc hơn "if 'FOO' not in os.environ: ..." khối - Dangercrow
Cảm ơn đã nhắc tôi rằng 'tốt hơn' là chủ quan - RandomInsano


Bạn có thể truy cập vào các biến môi trường bằng cách sử dụng

import os
print os.environ

Hãy thử xem nội dung của các biến môi trường PYTHONPATH hoặc PYTHONHOME, có thể điều này sẽ hữu ích cho câu hỏi thứ hai của bạn. Tuy nhiên bạn nên làm rõ nó.


21
2018-02-05 13:07





Đối với các biến môi trường:

import os
print os.environ["HOME"]

Tôi e rằng bạn sẽ phải tìm ra điểm thứ hai của bạn thêm một chút nữa trước khi có một câu trả lời hợp lý.


13
2018-02-05 13:07





import os
for a in os.environ:
    print('Var: ', a, 'Value: ', os.getenv(a))
print("all done")

Điều đó sẽ in tất cả các biến môi trường cùng với các giá trị của chúng.


9
2018-03-28 15:46





Trong Python 3:

#!/usr/bin/python3
import os
for param in os.environ.keys():
    print("%s: %s " % (param, os.environ[param]))

6
2018-02-21 11:16



Hoặc thậm chí: for param, val in os.environ.items(): print("%s: %s " % (param, val)) - HagaiH
Điều này cũng hoạt động trên Python 2.7. - codeforester


Nếu bạn định sử dụng mã trong mã ứng dụng web sản xuất,
sử dụng bất kỳ khung công tác web nào như Django / Flask, sử dụng các dự án như envparse, bằng cách sử dụng nó, bạn có thể đọc giá trị như loại được xác định của bạn.

from envparse import env
# will read WHITE_LIST=hello,world,hi to white_list = ["hello", "world", "hi"]
white_list = env.list("WHITE_LIST", default=[]) 
# Perfect for reading boolean
DEBUG = env.bool("DEBUG", default=False)

LƯU Ý: kennethreitz's autoenv là công cụ được đề xuất để tạo biến môi trường cụ thể của dự án, xin lưu ý rằng những người đang sử dụng autoenv hãy giữ .env tệp riêng tư (không thể truy cập công khai)


6
2018-01-10 04:12