2015-01-26 15 views
5

Tôi biết về thoát khỏi dấu gạch chéo ngược trong lập trình. Tuy nhiên tôi đang đi qua trong một đối số dòng lệnh vào một chương trình Python để phân tích cú pháp. Khoảng trống là không liên quan, tuy nhiên thông qua dòng lệnh, khoảng trắng không quan trọng. Vì vậy, tôi đang cố gắng để nối tất cả các đối số argv [] ngoại trừ phần tử đầu tiên thành một chuỗi để phân tích cú pháp. Tuy nhiên, một mã thông báo của một '\' đơn không bao giờ gặp phải trong vòng lặp for.Xử lý dấu gạch chéo ngược làm đối số dòng lệnh trong Python

Đối số dòng lệnh (chú ý khoảng trắng xung quanh '\'):

((1 * 2) + (3 - (4 \ 5))) 

Chương trình:

import sys 
string = "" 
for token in sys.argv[1:len(sys.argv)]: 
    print(token) 
    if "\\" in r"%r" % token: 
     print("Token with \\ found") 
    string += token 
print(string) 
print("done") 
+3

Tại sao bạn không chuyển toàn bộ biểu thức dưới dạng một đối số? 'python myscript.py '((1 * 2) + (3 - (4 \ 5)))''. Ngoài ra, bash coi \ như là một khởi đầu của một chuỗi thoát và không gửi nó thông qua như một đối số, nhưng cmd không và gửi nó bình thường, cung cấp cho hành vi khác nhau trên hệ điều hành khác nhau. – Kolmar

+0

Tôi đồng ý với @Kolmar, nó sẽ làm cho mọi thứ trở nên dễ dàng hơn nhiều trong python, và bạn không phải lo lắng về những gì trình bao làm đối số của bạn – Paco

+0

Điều đó làm việc hoàn hảo. Cảm ơn tất cả! – tfbbt8

Trả lời

3

Đây không phải là một vấn đề Python. Shell sẽ giải thích văn bản bạn viết ở dòng lệnh và (đối với các shell Unix điển hình) thực hiện thay thế dấu gạch chéo ngược. Vì vậy, vào lúc Python kiểm tra dòng lệnh, dấu gạch chéo ngược sẽ bị thay thế.

Giải pháp thay thế là tăng gấp đôi dấu gạch chéo ngược hoặc đặt dấu gạch chéo trong dấu nháy đơn, nếu trình bao của bạn là Bash hoặc một số trình vỏ Unix tương thích Bourne khác. Windows CMD là khác nhau và hoang mang trong quyền riêng của mình; Csh gấp đôi như vậy.

+0

Cảm ơn bạn. Đó là cho một nhiệm vụ và tôi đã chỉ đi theo pdf cho thấy nó được thông qua mà không có dấu ngoặc kép. Sử dụng dấu nháy đơn cố định hoàn toàn vấn đề. Cảm ơn một lần nữa! – tfbbt8

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