2013-01-31 18 views
5

Tôi đang cố gắng gọi Vim bằng cách sử dụng tiến trình con, và chuyển cho nó một đối số. Ví dụ:Làm cách nào để tôi có thể yêu cầu tiến trình con dừng thoát khỏi dấu ngoặc kép?

subprocess.call(['gvim.exe', ''' "+map <F5> :echo 'Hello!'<cr>" ''']) 

lệnh này hoạt động trên dòng lệnh:

> gvim.exe "+map <F5> :echo 'Hello!'<cr>" 

Và sau đó tôi nhấn F5 và nó nói với tôi xin chào.

Cuộc gọi subprocess không hoạt động. Khi tôi xem xét quy trình trong trình quản lý tác vụ, tôi thấy chuỗi của tôi bây giờ là:

"\" +map <F5> :echo 'Hello!'<cr>\"" 

Không phải tất cả những gì tôi mong đợi và tôi cũng không nghĩ đó là điều mà Vim mong đợi. Nó trông như subprocess bằng cách nào đó thoát khỏi dấu ngoặc kép của tôi, nhưng tôi không biết tại sao.

Có cách nào để tôi có thể làm việc này như tôi mong đợi không?

Trả lời

5

Dấu ngoặc kép là không cần thiết vì subprocess.call chuyển đối số trực tiếp đến quy trình mà không sử dụng trình bao (trừ khi bạn đặt shell=True).

Vì vậy, subprocess.call(['gvim.exe', "+map <F5> :echo 'Hello!'<cr>"]) sẽ đủ.

+1

Có, vấn đề không phải là thoát (chỉ sau khi hiển thị chuỗi), đó là dấu ngoặc kép. – kindall

+0

Huh. Tôi nghĩ * Tôi cũng thử phương pháp đó. Tôi đoán là không! –

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