使用格式在字符串中添加反斜杠

问题描述

我在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))

,但不是暗示该字符串实际上包含两个反斜杠。