Skip to main content
 首页 » 编程设计

python之$ python -c "script"中的反斜杠

2025年05月04日11bluestorm

今天我写了一个 Python 脚本来处理数据并以自定义格式打印它们。它在交互式 Python 下按预期工作。然后我继续尝试在终端中将输出重定向到文本文件,但遇到了一些意想不到的事情。

我尝试的特定示例是按列排列数据列表,并以 LaTeX 表格格式打印它们。它的工作原理或多或少类似于:

foo(mylist, sep_col='\t', sep_row=r'\\ \hline') 

当我尝试在终端中运行脚本时,我这样做了:

$ python -c "from foo import foo; foo(mylist, col_sep=' & ', row_sep=r' \\ \hline')" > results.txt 

但结果发现\\\hline部分显示为\\hline,这和交互式Python下不太一样。

当我深入研究这个问题(或者背后的原理)时,我发现在交互式 Python 下,$ python -c 处理的 Python 脚本的行为是不一样的。

在交互式 Python 下:>>> print r'\\' 给出 \\

但是,在终端中,$ python -c "p​​rint r'\\'" 引发了一个SyntaxError:

  File "<string>", line 1 
    print r'\' 
             ^ 
SyntaxError: EOL while scanning string literal 

当反斜杠的数量为 3 或 4 时,终端似乎给出 \\。数字 5 或 6 引发错误。 7个反斜杠给\\\\,意思是这个环境下没办法给\\\

这个问题找了好久,好像很少有人讲$ python -c。如果我复制了,请提前道歉。

请您参考如下方法:

在终端中,说:

$ python -c "print r'\\'" 
  File "<string>", line 1 
    print r'\' 
             ^ 
SyntaxError: EOL while scanning string literal 

导致错误,因为 shell 起作用了。它将 \\ 转换为\(仔细查看错误消息)。

相反,说

$ python -c 'print r"\\"' 
\\ 

从 shell 运行时,即在单引号中提供命令,在双引号中提供 print 的参数。

您在交互模式下执行的命令的等价物是:

$ python -c "print r'\\\\'" 
\\ 

编辑:This答案解释了为什么原始字符串不能有奇数个反斜杠。

而且这个在官方FAQ中也有说明.