Python: Cách độc lập với nền tảng để sửa đổi biến môi trường PATH


89

Có cách nào để sửa đổi PATHbiến môi trường theo cách độc lập với nền tảng bằng python không?

Một cái gì đó tương tự như os.path.join()?

Câu trả lời:


170

Bạn sẽ có thể sửa đổi os.environ.

os.pathseplà ký tự để phân tách các đường dẫn khác nhau, bạn nên sử dụng ký tự này để nối mỗi đường dẫn mới:

os.environ["PATH"] += os.pathsep + path

hoặc nếu có một số đường dẫn để thêm vào danh sách:

os.environ["PATH"] += os.pathsep + os.pathsep.join(pathlist)

Như bạn đã đề cập, os.path.joincũng có thể được sử dụng cho từng đường dẫn riêng lẻ mà bạn phải nối thêm trong trường hợp bạn phải xây dựng chúng từ các phần riêng biệt.


Điều gì với bộ tách môi trường PATH? ? linux - / usr / bin: / lib: ":" windows - C: \ asdf \; C: \ Prog ...; ";"
bua

2
@bua: ý bạn là os.pathseptôi đã đề cập (cụ thể cho PATH)?
RedGlyph

@RedGlyph Có, xin lỗi, tôi nghĩ rằng os.pathsep là "/" và "\". Tôi đã không kiểm tra điều đó trước khi yêu cầu;).
bua

11
@bua: Nó gần như là một "gotcha" đó os.path.sep != os.pathsep.
krawyoti

@krawyoti, bua: Ah, bây giờ tôi thấy ... cũng phát hiện ra! Đây là một sai lầm dễ dàng thực :-)
RedGlyph

17

Xin lưu ý rằng đó os.environkhông thực sự là một từ điển. Đó là một đối tượng giống như từ điển đặc biệt thực sự đặt các biến môi trường trong quy trình hiện tại bằng cách sử dụng setenv .

>>> os.environ.__class__
<class os._Environ at 0x100472050>
>>> import os
>>> os.environ["HELLO"] = "WORLD"
>>> os.getenv("HELLO")
'WORLD'

Điều này có nghĩa là PATH(và các biến môi trường khác) sẽ hiển thị với mã C chạy trong cùng một quá trình.

(Vì nhận xét không thể chứa định dạng, tôi phải đặt câu này trong câu trả lời, nhưng tôi cảm thấy đó là một điểm quan trọng cần thực hiện. Đây thực sự là một nhận xét về nhận xét không có tương đương với 'xuất' .)


6

Lưu ý khi sửa đổi các biến môi trường trong Python là không có lệnh shell "export" tương đương. Không có cách nào đưa các thay đổi vào quy trình hiện tại, chỉ có quy trình con.


1: Wise để chỉ ra rằng, các lệnh thích os.system, os.popenhoặc subprocess.Popensau đó nên được sử dụng từ các ứng dụng Python để khởi động quá trình khác. Nếu không thì nó khá vô nghĩa.
RedGlyph

14
Đây không phải là sự thật.
Glyph

4
Làm rõ tuyên bố của Glyph: điều này không đúng vì các thay đổi được đưa vào quy trình hiện tại (là quy trình python). OP có thể có nghĩa là không có cách nào để đưa các thay đổi vào quy trình mẹ (thường là một trình bao mà tập lệnh python được thực thi từ đó).
PonyEars

4
Nếu đó là ý của OP, thì shell cũng không có khả năng này; exportkhiến một biến được sao chép vào môi trường của tất cả các tiến trình con , nhưng không ảnh hưởng đến tiến trình mẹ.
Kyle Strand
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.