在Python中处理反斜杠作为命令行参数

8
我知道在编程中如何转义反斜杠。但是我正在将一个命令行参数传递到Python程序中进行解析。空格不重要,但是通过命令行,空格确实很重要。因此,我正在尝试将除第一个元素外的所有argv []参数连接成一个字符串,然后进行解析。然而,在for循环中从未遇到单个'\'的标记。
命令行参数(注意'\ '周围的空格):
((1 * 2) + (3 - (4 \ 5)))

程序:

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")

4
为什么不将整个表达式作为单个参数传递?python myscript.py '((1 * 2) + (3 - (4 \ 5)))'。此外,bash 将 \ 视为转义序列的开始,因此不会将其作为参数发送,但是 cmd 不会这样做,会正常发送,这会导致在不同的操作系统上出现不同的行为。 - Kolmar
我同意 @Kolmar 的观点,这会让 Python 编程变得更容易,而且你不必担心 shell 对你的参数做了什么。 - Paco
那个完美地运行了。谢谢大家! - tfbbt8
1个回答

5

这不是一个Python的问题。Shell会解析你在命令行中输入的文本,并且(对于典型的Unix shell)执行反斜杠替换。因此,在Python检查命令行之前,反斜杠已经被替换掉了。

解决方法是如果你使用的是Bash或其他Bourne-compatible Unix shell,请将反斜杠加倍或将其放在单引号中。Windows CMD有其独特的困惑,Csh则更加如此。


谢谢朋友。这是为了一个作业,我只是按照 PDF 文件中显示的方式进行传递,没有使用引号。使用单引号完全解决了问题。再次感谢! - tfbbt8

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接