2011-11-01 36 views
6

Tôi đang cố gắng tìm ra cách tạo chương trình python mở tệp khi người dùng nhấp chuột phải vào tệp và chọn "Mở bằng". Ví dụ: tôi muốn người dùng có thể nhấp chuột phải vào tệp văn bản và chọn chương trình của tôi để chương trình của tôi có thể xử lý tệp văn bản. Tên của tệp văn bản có được chuyển vào chương trình của tôi một cách nào đó không? Cảm ơn."Mở bằng ..." một tệp trên Windows, với ứng dụng trăn

Trả lời

3

Vấn đề với cách tiếp cận này là tệp .py của bạn không phải là tệp thực thi; Windows sẽ chuyển tệp văn bản dưới dạng tham số sang tệp .py, nhưng tệp .py sẽ không làm bất kỳ điều gì vì nó không phải là tệp thi hành.

Những gì bạn có thể làm là biên dịch tập lệnh của mình với py2exe để có được tệp thực thi thực tế mà bạn thực sự có thể chỉ định trong màn hình "Mở bằng ..." (thậm chí bạn có thể đăng ký nó làm mặc định cho bất kỳ tệp * .foo nào). Đường dẫn đến tệp .foo đang được chuyển phải là sys.argv[1] trong tập lệnh của bạn.

+0

py2exe là một overkill vì nó tạo ra một chương trình để một exe độc ​​lập mà không cần python ở tất cả và nó cần phải được biên dịch lại mỗi khi chương trình được thay đổi (trong trường hợp bạn phát triển nó). Có exe hàm bao trong% python% \ Scripts \ mà chỉ cần khởi chạy một kịch bản python với cùng một tên. Ai đó biết gì về nó? –

0

Trước tiên, bạn cần phải đăng ký tập lệnh của mình để chạy bằng Python trong ProgId trong sổ đăng ký. Tối thiểu, bạn sẽ cần phải động từ mở định nghĩa:.

HKEY_CURRENT_USER\Software\Classes\MyApp.ext\ 
    (Default) = "Friendly Name" 
    DefaultIcon\ 
    (Default) = "path to .ico file" 
    shell\ 
    open\ 
     command\ 
     (Default) = 'path\python.exe "path\to\your\script.py" "%L"' 

Bạn có thể thay thế HKEY_LOCAL_MACHINE nếu bạn đang cài đặt máy rộng * Ngoài ra còn có versioning ước rằng có thể bạn có thể bỏ qua. Phần MSDN trên File Types có thông tin chi tiết hơn.

Bước thứ hai là thêm ProgID của bạn vào OpenWithProdIds chủ chốt của phần mở rộng bạn muốn xuất hiện trong danh sách cho:

HKEY_CURRENT_USER\Software\Classes\.ext\OpenWithProgIds 
    MyApp.ext = None 

Giá trị của khóa không quan trọng, miễn là tên khớp chính xác với ProgId của bạn.


* Lưu ý rằng HKEY_CLASSES_ROOT thực sự là chìa khóa giả mạo 'chứa' một sự kết hợp của cả hai HKLM\Software\ClassesHKCU\Software\Classes; nếu bạn đang viết vào sổ đăng ký, bạn nên chọn một trong các khóa thực tế. Bạn không cần nâng cấp để cài đặt vào HKEY_CURRENT_USER.

+0

Tôi sẽ tuyên bố rằng tôi đã không thử điều này, vì tôi không đặc biệt muốn gây rối với cài đặt của tôi trên máy này. MSDN gợi ý rằng một vài giá trị khác cần phải được thiết lập nhưng một cái nhìn nhanh qua registry của tôi nói rằng chúng không cần thiết. Chắc chắn quan tâm nếu giải pháp tối thiểu này hoạt động; hãy tiếp tục và chỉnh sửa thêm bất kỳ bit nào tôi đã bỏ lỡ. – Zooba

+0

Điều này đơn giản là không hoạt động; chọn .py trong menu 'open with' vẫn báo cáo nó không phải là một ứng dụng win32. –

0

Cách tiếp cận của tôi là sử dụng tệp chuyển hướng .bat có chứa python someprogram.py %1. Các %1 vượt qua đường dẫn tập tin vào kịch bản python mà có thể được truy cập với
from sys import argv argv[1]

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