2011-11-18 36 views
7

Tôi đang làm việc trong Mac OS X và đã viết các tập lệnh sao chép tệp/thư mục đơn giản bằng Python. Có cách nào để kéo và thả một thư mục lên trên biểu tượng tập lệnh Python và chuyển đường dẫn của tệp hoặc thư mục làm đối số trong tập lệnh không?Cách chuyển tên đường dẫn sang tập lệnh Python bằng cách "thả" tệp/thư mục qua biểu tượng tập lệnh

Hiện tại, tôi có một giọt AppleScript (hỗ trợ kéo và thả) để chuyển các đường dẫn của các thư mục và tệp đã bị xóa sang Python. Tuy nhiên, tôi muốn chỉ có một kịch bản Python thay vì một tập lệnh AppleScript và Python.

Mọi trợ giúp sẽ được đánh giá cao.

Trả lời

3

Chỉ cần sử dụng "Xây dựng Applet" tiện ích:

/Developer/Applications/Utilities/MacPython\ 2.5/Build\ Applet.app 

và các đường dẫn tập tin giảm sẽ có sẵn qua sys.argv.

Lưu ý rằng bạn có thể phải sử dụng python2.5 (hoặc một phiên bản vá) - Xem ghi chú này: https://bitbucket.org/ronaldoussoren/py2app/issue/16/argv-emulation-code-needs-rewrite

dụ Nhanh - chỉnh sửa tập tin này và đặt nó trên máy tính của bạn:

#!/usr/bin/python2.5 
import sys 
print sys.argv 

Kiểm soát nhấp vào nó và chọn mở bằng "Xây dựng Applet (2.5.4)"

Biểu tượng ứng dụng sẽ xuất hiện trên máy tính để bàn.

Mở Bảng điều khiển Tiện ích & hiển thị rõ ràng.

Thả một số tệp vào biểu tượng Ứng dụng - bạn sẽ thấy bản in trong cửa sổ bảng điều khiển.

+0

Cảm ơn rất nhiều, đây chính xác là những gì tôi cần. – John1538

1

Điều bạn thực sự thích là Dịch vụ Mac OS. Chúng là quy trình làm việc của Automator, có thể tích hợp độc đáo vào hệ điều hành theo cách thức theo ngữ cảnh cụ thể: ví dụ: bạn có thể làm cho tập lệnh của mình xuất hiện trong menu ngữ cảnh của Finder khi bạn chọn một thư mục.

Bạn có thể làm cho một dịch vụ từ kịch bản python theo cách sau:

  1. mở Automator.app và tạo ra một dịch vụ mới;
  2. Trên đầu trang của khối công việc bạn chọn loại đầu vào ứng dụng của bạn mong đợi (thư mục là sự lựa chọn của bạn nếu tôi hiểu chính xác);
  3. Kéo khối "Chạy Shell Script" từ ngăn bên trái vào luồng công việc;
  4. Bây giờ bạn có thể sử dụng vỏ bash mặc định (/bin/bash) để gọi script của bạn:

    /full/path/to/your/python /full/path/to/your/script.py [email protected] 
    

  5. Hoặc sử dụng /usr/bin/python (mặc định python) và dán mã của bạn trực tiếp vào khối văn bản;

  6. Đừng quên đặt ở góc trên bên phải của khối.

Đó là một chút khó khăn để gỡ lỗi quy trình công việc như vậy (vì bạn sẽ không thấy stdout & stderr).Giải pháp khắc phục có thể có để gỡ lỗi là thiết lập tùy chỉnh excepthook và xuất tất cả các ngoại lệ thành một số tệp văn bản thuần túy:

import sys, traceback 

def excepthook(type, exc, tb): 
    with open("error.log", "a") as f: 
     traceback.print_exc(file=f) 

sys.excepthook = excepthook 
+0

Cảm ơn rất nhiều vì sự giúp đỡ của bạn, Den. – John1538

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