Tôi chạy một vỏ trăn từ crontab mỗi phút:
* * * * * /home/udi/foo/bar.py
/home/udi/foocó một số thư mục con cần thiết, như /home/udi/foo/logvà /home/udi/foo/config, trong đó /home/udi/foo/bar.pyđề cập đến.
Vấn đề là crontabchạ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.logthấ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!
crontabtrườ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();inspectgiải pháp dựa trên có thể được sử dụng thay thế.