2010-05-25 23 views

Trả lời

7

Điều này dường như không dễ dàng thực hiện được; quá trình kém hơn được quản lý bởi mô-đun python.el được thiết kế để tồn tại trên nhiều lời gọi của python-send-buffer (và bạn bè). Một giải pháp tôi đã tìm thấy là viết chức năng của riêng bạn mà bộ sys.argv lập trình từ bên trong quá trình kém:

(defun python-send-buffer-with-my-args (args) 
    (interactive "sPython arguments: ") 
    (let ((source-buffer (current-buffer))) 
    (with-temp-buffer 
     (insert "import sys; sys.argv = '''" args "'''.split()\n") 
     (insert-buffer-substring source-buffer) 
     (python-send-buffer)))) 

Execute chức năng này trong bộ đệm *scratch* của bạn và/hoặc lưu nó trong tập tin .emacs của bạn, sau đó, nếu bạn muốn, liên kết nó với một chuỗi khóa thuận tiện. C-c C-a dường như không được sử dụng bởi python-mode, vì vậy có lẽ:

(global-set-key "\C-c\C-a" 'python-send-buffer-with-my-args) 

Lệnh sẽ nhắc bạn cho các đối số để sử dụng, sau đó sao chép đệm nguồn của bạn vào một bộ đệm tạm thời, thêm vào trước nó với một đoạn mã mà bộ sys.argv vào danh sách các đối số bạn đã cung cấp và cuối cùng sẽ gọi python-send-buffer.

Đoạn mã trên sẽ chỉ chia nhỏ chuỗi bạn nhập vào khoảng trắng, vì vậy nếu bạn cần cung cấp các đối số có khoảng trống trong chúng, bạn sẽ cần một thuật toán phức tạp hơn.

+0

Cảm ơn Sean, tôi đã có ý tưởng. Nó làm các trick. Trong trường hợp này, tôi cũng có thể truyền các đối số bằng cách trực tiếp thiết lập biến sys.argv trước khi gọi hàm main. – Sammy

+0

+1 cho ý tưởng tuyệt vời. –

+0

nếu bạn gặp lỗi này 'progn: Định nghĩa hàm của Symbol bị vô hiệu: python-send-buffer' thử thay đổi 'python-send-buffer' thành' python-shell-send-buffer'. – boclodoa

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