如何解决使用格式在字符串中添加反斜杠
我在mod之后添加了一个反斜杠,我需要使用子进程来执行,但是在打印命令名称时,使用pdb显示了两个反斜杠。
Data
输出应该像
useEffect(() => {
const requestOptions = {
method: "GET",headers: {
"Content-Type": "application/json",Authorization:JSON.parse(localStorage.getItem("tokenType")) + " " + JSON.parse(localStorage.getItem("accessToken")),},};
axios
.get("/users",requestOptions)
.then((response) => {
setUsers(response.data);
setIsLoading(true);
})
.catch((err) => alert(err));
axios
.get("/groups",requestOptions)
.then((response) => {
setRenderedUsers(response.data);
setIsLoading(true);
})
.catch((err) => alert(err));
},[]);
我尝试以这种格式添加反斜杠,但随后又添加了更多的反斜杠。
无论如何都要对此进行编码,以便得到一个反斜杠。
解决方法
只有一个反斜杠。您可以通过print(command)
进行确认。您看到两个反斜杠的原因是pdb在代码内将值显示为Python字符串,并且反斜杠通常需要在Python的字符串中转义-实际上,您不应该在代码中写"…\,…"
,您应该写"…\\,…"
。但是由于\,
不是known escape sequence,因此可以说Python可以“放这张幻灯片”。
但是要注意,通常在字符串中使用\
可能有特殊含义,如果要使用文字反斜杠,则需要转义(即写\\
),或者需要使用原始字符串文字(r"…"
)。
正如其他人所指出的那样,实际上只有一个反斜杠,而不是两个。
比起使用反斜杠,更好的解决方案是省略uint64
并将shell=True
命令行作为列表传递。
ffmpeg
这样,您可以避免使用其他组件(外壳),并且如果命令的任何部分来自用户,那么您还将避免创建安全漏洞。一般来说,最好尽可能避免使用command = [
"ffmpeg","-i",vid,"-vf",r"select=not(mod(n\,{}))".format(args.nfps),"-vsync","-vfr","-q:v","2",os.path.join(viddir,"%06d.png"),]
subprocess.call(command,stderr=subprocess.DEVNULL)
。
如果要在字符串中包含文字反斜杠,则可以选择使用原始字符串(请注意,在r
开头应加上'
):
>>> s = r'foo\bar'
>>> print(s)
foo\bar
或使用额外的反斜杠引用反斜杠:
>>> s = 'foo\\bar'
>>> print(s)
foo\bar
了解您拥有什么的最好方法是使用print
。
请注意,如果仅在交互式会话中(包括print
中键入变量名称而不是使用pdb
来显示字符串的内容,那么这将等效于{ {1}}-换句话说,它所打印的实际上是在Python源代码中需要使用的表达式,以便恢复原始字符串。因此,这将包括额外的反斜杠,如上所示:
print(repr(s))
,但不是暗示该字符串实际上包含两个反斜杠。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。