Tôi chạy một vỏ trăn từ crontab mỗi phút:
* * * * * /home/udi/foo/bar.py
/home/udi/foo
có một số thư mục con cần thiết, như /home/udi/foo/log
và /home/udi/foo/config
, trong đó /home/udi/foo/bar.py
đề cập đến.
Vấn đề là crontab
chạy tập lệnh từ một thư mục làm việc khác, vì vậy cố gắng mở ./log/bar.log
thất bại.
Có cách nào hay để nói kịch bản thay đổi thư mục làm việc thành thư mục riêng của tập lệnh không? Tôi sẽ thích một giải pháp sẽ hoạt động cho bất kỳ vị trí tập lệnh nào, thay vì nói rõ ràng kịch bản đó ở đâu.
BIÊN TẬP:
os.chdir(os.path.dirname(sys.argv[0]))
Là giải pháp thanh lịch nhỏ gọn nhất. Cảm ơn câu trả lời và giải thích của bạn!
crontab
trường hợp sử dụng: cả haisys.argv[0]
và__file__
thất bại nếu tập lệnh được chạy bằng cách sử dụngexecfile()
;inspect
giải pháp dựa trên có thể được sử dụng thay thế.