gpt4 book ai didi

Python sys.argv 从命令行自动转义我的参数?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:57:25 24 4
gpt4 key购买 nike

我正在尝试构建一个脚本,需要 linux shell 中“grep”的强大功能。
但是,我发现 Python sys.argv 从命令行转义了我的正则表达式模式。
例如,我将从命令行将 '\d' 作为 grep 模式传递。
但是 sys.argv[1] 返回的字符串被转义为 '\\d'

我在 Debug模式下做了以下测试:

#SyntaxTest.py
import sys
#other stuff preventing my debugger from stopping after importing

#shell
python3 -m pdb SyntaxTest.py '\d'

> /cygdrive/d/PythonSandBox/SyntaxTest.py(1)<module>()
-> import sys
(Pdb) n
(Pdb) sys.argv[1]
'\\d'
(Pdb) print(sys.argv[1])
\d

我想知道为什么 Python 需要对我的命令行参数进行转义,我正在询问一种方法来在我的示例中获得一个普通的、未转义的字符串。

编辑

令人印象深刻的是'\\d'=='\d'。
但在我的情况下,我需要像这样将字符串传递给子进程。

>>> pattern = '\d'
>>> str = r"echo '%s'"%pattern
>>> str
"echo '\\d'"
>>> subprocess.check_output(str,shell=True)
b'\\d\n'

很明显,\\d 已传递给 shell。但是,我需要它只是\d 而不是\\d。除了手动替换还有什么办法吗?

最佳答案

这就是 Python 解释器打印字符串的方式。您的 print 调用显示该字符串并未真正转义。

>>> '\d'
'\\d'
>>> '\\d'
'\\d'
>>> print('\d')
\d
>>> print('\\d')
\d

另请注意,'\d''\\d' 是编写同一字符串的两种方式。

>>> '\d' == '\\d'
True

关于Python sys.argv 从命令行自动转义我的参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30993378/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com