2012-07-09 44 views
5

Tôi muốn thực thi một tập lệnh work.py bằng Python, sau khi thực hiện một số tập lệnh khởi tạo init.py.Kịch bản khởi động Python

Nếu tôi đang tìm kiếm một phiên tương tác, thực hiện python -i init.py hoặc đặt PYTHONSTARTUP=/path/to/init.py sẽ thực hiện thủ thuật, nhưng tôi đang tìm cách thực thi một tập lệnh khác.

Vì đây là trường hợp chung thường xảy ra (init.py đặt môi trường và vì vậy cũng như nhau), tôi rất muốn không tham chiếu init.py từ work.py. Làm thế nào điều này có thể được thực hiện? Có gì thay đổi nếu tôi cần điều này từ một kịch bản thay vì từ dấu nhắc không?

Cảm ơn bạn rất nhiều.

+0

'work' phụ thuộc vào' init' như thế nào? Bạn có thể chỉ cần nhập 'python -c 'init; nhập khẩu work''? - hoặc có lẽ kém thanh lịch hơn, 'python -c 'execfile (" init.py "); execfile ("work.py") '' – mgilson

+0

' work' cần 'init' được thực thi trước nó. Những gì bạn đang đề xuất có thể làm việc (sẽ thử nó ngay bây giờ) nhưng nó hầu như không lý tưởng - Tôi cần một cái gì đó như thế này mỗi khi tôi chạy một kịch bản python. Tôi có thể bí danh hoặc tạo lệnh trình bao để tham chiếu nó theo cách thông thường, ví dụ: 'py work.py' trong đó' py() 'sẽ là một lệnh shell được định nghĩa, nhưng điều đó sẽ gây ra các vấn đề khác. Tôi muốn một cách sạch sẽ luôn luôn thực hiện cùng một init script nếu có ... – gt6989b

+0

Vì vậy, (chỉ để được rõ ràng), bạn muốn xác định toàn cầu một kịch bản ('init.py') được gọi là trước bất cứ điều gì khác khi khởi động python như thể bạn đang làm một cái gì đó như 'cat init.py main.py | python' hoàn toàn độc lập với tập tin 'main.py' thực sự là gì? – mgilson

Trả lời

5

Thông thường hơn trong câu trả lời được chấp nhận của C0deH4cker, điều này được thảo luận trong hướng dẫn sử dụng Python trong Section 2.2.5 - Cusomization Modules. Ý tưởng cơ bản là, để có được vị trí của tập lệnh khởi động đặc biệt, bạn cần thực thi mã Python sau, ví dụ: từ phiên tương tác của thông dịch viên:

>>> import site 
>>> site.getusersitepackages() 
'/home/user/.local/lib/python3.2/site-packages' 

Đầu ra phải chính xác vị trí như vậy, trong tệp sitecustomize.py.

+0

Đây phải là câu trả lời được chấp nhận, vì câu trả lời dễ di chuyển hơn. –

4

Python có tập lệnh đặc biệt được chạy khi khởi động. Trên nền tảng của tôi, nó nằm ở số /usr/lib/python2.5/site-packages/sitecustomize.py IIRC. Vì vậy, bạn có thể đặt init.py trong thư mục đó cùng với tập lệnh sitecustomize.py nhập mã đó hoặc chỉ dán nội dung của init.py vào sitecustomize.py.

+0

không thể làm cho nó hoạt động - đặt 'init.py' vào'/path/to/python/site-packages/site-customize.py' (thư mục đã tồn tại, tập tin không) và không thấy thay đổi trạng thái trước đó. – gt6989b

+1

Rất tiếc, sitecustomize.py của nó (không có dấu gạch ngang). Chỉnh sửa câu trả lời. – C0deH4cker

+0

cảm ơn bạn, đã làm việc như ma thuật. Tôi muốn bạn có thể làm điều này mà không cần hack. Để bây giờ, trừ khi bất cứ điều gì tốt hơn về chất lượng xuất hiện, tôi sẽ sẵn sàng chấp nhận câu trả lời của bạn. Cảm ơn vì đã giúp tôi. – gt6989b

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