2012-08-07 34 views
9

Tôi đang cố gắng tạo một chương trình quét tệp văn bản và chuyển đối số tới tiến trình con. Tất cả mọi thứ hoạt động tốt cho đến khi tôi nhận được thư mục với không gian trong đường dẫn.Xử lý các thư mục với dấu cách Python subprocess.call()

phương pháp phân chia của tôi, mà phá vỡ các đối số chuyến đi lên trong không gian:

s = "svn move folder/hello\ world anotherfolder/hello\ world" 

task = s.split(" ") 
process = subprocess.check_call(task, shell = False) 

Đô, hoặc là tôi cần chức năng để phân tích những lập luận chính xác, hoặc tôi vượt qua toàn bộ chuỗi các tiến trình con mà không phá vỡ nó xuống trước.

Tôi bị mất một chút.

+0

Bạn có thể dựa vào một số cố định của trái không gian được phân định mã thông báo? –

+1

cách trích dẫn tên tệp? –

+1

nếu bạn tạo tên tệp đang được đọc, tại sao không có các giá trị được phân cách bằng dấu phẩy? và sau đó chia thành "," thay vì tất cả những rắc rối? –

Trả lời

12

Sử dụng một danh sách thay vì:

task = ["svn", "move", "folder/hello world anotherfolder/hello world"] 
subprocess.check_call(task) 

Nếu tập tin của bạn có chứa toàn bộ các lệnh, không chỉ là đường dẫn sau đó bạn có thể thử shlex.split():

task = shlex.split(s) 
subprocess.check_call(task) 
+3

+1 cho [shlex] (http://docs.python.org/library/shlex). – RanRag

+0

cảm ơn bạn cảm ơn! việc sử dụng danh sách sẽ giải quyết tất cả các vấn đề trích dẫn/thoát hiểm kỳ lạ +1 – Brian

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