2010-11-02 54 views
5

Tôi đang cố gắng chạy tập lệnh python từ cron, nhưng nó không chạy đúng vì vậy tôi giả định biến env đường dẫn khác của nó. Có anyway để thay đổi biến trong một kịch bản python?làm cách nào để sửa đổi biến đường dẫn hệ thống trong tập lệnh python?

+1

Bạn nên cung cấp chi tiết hệ điều hành của mình. Ngoài ra, điều này có vẻ giống như một bản sao có thể có - tôi khuyên bạn nên tìm kiếm kỹ hơn. –

+0

"Không chạy đúng" nghĩa là gì? Bạn có chắc chắn bạn thậm chí bắt đầu tập lệnh của mình (tức là nó có thể tìm thấy mã nhị phân python của bạn) –

+0

Tôi đang làm rất nhiều Popen với các chương trình không có đường dẫn với chúng. –

Trả lời

4

Bạn không cần phải đặt PATH từ bên trong tập lệnh python. Thay vào đó, hãy đặt một cái gì đó như

USER=joe 
HOME=/home/joe 
SHELL=/bin/bash 
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/some/other/path 
PYTHONPATH=/home/joe/pybin 
MAILTO=joe 
LANG=en_US.UTF-8 

#min hr day mon dow 
*/5 12 *  * *  reminder.py 'Eat lunch' 

ở đầu crontab của bạn. Các biến môi trường này sẽ có sẵn cho tất cả các công việc cron chạy qua crontab của bạn.

+0

ở trên cùng với công việc cron bên dưới? –

+0

@Joe: yes; ngay ở trên cùng, với các dòng lệnh cron bên dưới. – unutbu

9

@ubuntu có cách tiếp cận đúng, nhưng đối với những gì nó có giá trị, @Joe Schmoe, nếu bạn cần các thông tin:

import sys 
print sys.path 
['.', '/usr/local/bin', '/usr/local/lib/python2.6/dist-packages',...] 
sys.path.append('/home/JoeBlow/python_scripts') 
print sys.path 
['.', '/usr/local/bin', '/usr/local/lib/python2.6/dist-packages', '/home/JoeBlow/python_scripts',...] 

sys.path là một mảng chứa tất cả mọi thứ đó là trong PYTHONPATH kịch bản bắt đầu của bạn biến (hoặc bất kỳ PYTHONPATH mặc định của shell của bạn).

8

Khi câu trả lời được chấp nhận hoạt động cho mục đích của OP và câu trả lời thứ hai là chính xác để cập nhật biến sys.path python, tôi nghĩ, nếu OP không thể sử dụng câu trả lời được chấp nhận (bởi vì, có một chính sách chống lại việc sửa đổi biến hệ điều hành PATH trên các máy xây dựng/thử nghiệm), một cái gì đó giống như this SO answer sẽ là những gì họ đang tìm kiếm. Tóm tắt các trường hợp đơn giản ở đây, để thay đổi các biến môi trường PATH OS:

app_path = os.path.join(root_path, 'other', 'dir', 'to', 'app') 
os.environ["PATH"] += os.pathsep + app_path 

Ít nhất, đây là những gì tôi đã hy vọng để tìm thấy khi tôi đọc câu hỏi.

+0

+1 cho trường hợp bạn muốn đặt PATH (và PYTHONPATH là mã tương tự), mặc dù lưu ý rằng sys.path và os.environ ['PATH'] là/có thể khác nhau. – ntg

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