2012-09-11 38 views
7

Tôi có một phần mềm phức tạp mà tôi không thể đăng, cũng như tôi không có ví dụ làm việc cụ thể. Tôi sẽ cố gắng giải thích vấn đề, có thể ai đó đã gặp phải vấn đề này trước đây.os.getenv trả về Không thay vì giá trị chính xác

Trên Linux Shell tôi đã xác định một biến môi trường:

> export MY_TEST_ENV=4711 
> echo $MY_TEST_ENV 
> 4711 

Trong mã phức tạp Tôi muốn để có được biến này với

print os.getenv('MY_TEST_ENV') 

mà luôn luôn trả về None. Nếu tôi tạo một tập lệnh thử nghiệm để kiểm tra hành vi này, ngay cả với các lớp trong các tệp khác nhau, tôi luôn nhận được hành vi mong muốn (nghĩa là os.getenv('MY_TEST_ENV') trả lại giá trị chính xác 4711).

Mã được bắt đầu là 'sudo'.

Bất kỳ ý tưởng nào có thể là lý do?

+1

Bạn đang chạy "mã phức" này như thế nào? – geoffspear

+4

Phần còn lại của các biến môi trường vẫn còn đó? Quá trình python được khởi chạy như thế nào? Nếu bạn bắt đầu một quá trình với cuộc gọi hệ thống 'execve' và thực hiện _not_, hãy điền vào biến môi trường, môi trường của trẻ sẽ bị xóa. – alexis

+0

Tôi biết giải pháp cho vấn đề của tôi là tầm thường - bởi vì tôi chạy quá trình python như sudo! Nhưng tôi đã không nhìn thấy giải pháp này cho đến khi tôi được hỏi o làm thế nào để chạy mã. Không có sudo, tôi thấy biến (nhưng phần còn lại của mã sẽ không hoạt động). – Alex

Trả lời

4

Rất có thể cách bạn gọi quy trình Python khiến bạn mất môi trường. Nếu bạn xuất biến trong một shell đang chạy và, ngay sau đó, gọi quá trình Python được đề cập trong cùng một shell, biến môi trường này chắc chắn sẽ có sẵn cho tiến trình Python này. Để giúp bạn gỡ lỗi vấn đề này: thay vì mã được đề cập (print os.getenv('my...')), hãy in toàn bộ môi trường qua print os.environ. Từ kết quả bạn sẽ có thể suy ra những gì đã xảy ra với môi trường của bạn.

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