2009-11-05 55 views

Trả lời

110

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

Kể từ os.pathsep là nhân vật để tách những con đường khác nhau, bạn nên sử dụng để nối thêm mỗi con đường 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.join cũ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.

+0

gì có dải phân cách môi trường PATH ? ? linux -/usr/bin:/lib: ":" cửa sổ - C: \ asdf \; C: \ Prog ...; ";" – bua

+2

@bua: bạn có nghĩa là 'os.pathsep' tôi đã đề cập (cụ thể cho PATH) không? – RedGlyph

+0

Cảm ơn, đó là những gì tôi đang tìm kiếm. – resi

6

Thông báo trước với việc sửa đổi các biến môi trường trong Python, là không có tương đương với lệnh shell "export". Không có cách nào để tiêm các thay đổi vào tiến trình hiện tại, chỉ các tiến trình con.

+0

+1: Khôn ngoan để chỉ ra rằng, các lệnh như 'os.system',' os.popen' hoặc 'subprocess.Popen' sau đó sẽ được sử dụng từ ứng dụng Python để khởi chạy các quá trình khác. Nếu không nó là khá nhiều vô nghĩa. – RedGlyph

+8

Điều này không đúng. – Glyph

+3

Làm rõ tuyên bố của Glyph: điều này là không đúng vì những thay đổi * được * tiêm vào quá trình hiện tại (đó là quá trình python). OP có thể có nghĩa là không có cách nào để tiêm các thay đổi vào tiến trình cha (thường là một shell mà kịch bản python đã được thực hiện từ). – PonyEars

14

Xin lưu ý rằng os.environ không thực sự là từ điển. Đó là từ điển đặc biệt- như đối tượng thực sự đặt 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 rằng PATH (và các biến môi trường khác) sẽ được hiển thị cho mã C chạy trong quá trình tương tự.

(Kể từ khi bình luận không thể chứa định dạng, tôi phải đặt điều này trong một câu trả lời, nhưng tôi cảm thấy như đó là một điểm quan trọng để thực hiện. Đây là thực sự là một bình luận trên the comment about there being no equivalent to 'export'.)

Các vấn đề liên quan