3 回答

TA貢獻(xiàn)1830條經(jīng)驗(yàn) 獲得超9個(gè)贊
正如其他人所指出的,實(shí)際上只有一個(gè)反斜杠,而不是兩個(gè)。
比使用反斜杠更好的解決方案是省略并將命令行作為列表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)
這樣您就可以避免使用另一個(gè)組件(外殼),并且如果命令的任何部分來自用戶,您也可以避免創(chuàng)建安全漏洞。一般來說,最好shell=True盡可能避免。

TA貢獻(xiàn)2039條經(jīng)驗(yàn) 獲得超8個(gè)贊
只有一個(gè)反斜杠。您可以通過 確認(rèn)這一點(diǎn)print(command)
。您看到兩個(gè)反斜杠的原因是 pdb 在代碼中將值顯示為 Python 字符串,反斜杠通常需要在 Python 的字符串中進(jìn)行轉(zhuǎn)義 — 事實(shí)上,您不應(yīng)該在代碼中編寫,您應(yīng)該"…\,…"
編寫"…\\,…"
.?但由于\,
不是已知的轉(zhuǎn)義序列,Python 可以這么說“讓它滑動(dòng)”。
但請(qǐng)注意,通常在\
字符串內(nèi)部使用可能具有特殊含義,如果您想使用文字反斜杠,則需要將其轉(zhuǎn)義(即 write?\\
)或者您需要使用原始字符串文字 (?r"…"
)。

TA貢獻(xiàn)1776條經(jīng)驗(yàn) 獲得超12個(gè)贊
如果你想在字符串中包含文字反斜杠,那么你的選擇是使用原始字符串(注意r開頭之前的'):
>>> s = r'foo\bar'
>>> print(s)
foo\bar
或者使用額外的反斜杠引用反斜杠:
>>> s = 'foo\\bar'
>>> print(s)
foo\bar
查看您擁有的內(nèi)容的最佳方式是使用print.
請(qǐng)注意,如果您不使用print,而只是通過在交互式會(huì)話中鍵入變量名稱(包括在 中)來顯示字符串的內(nèi)容pdb,那么這將等同于print(repr(s))- 換句話說,它打印的內(nèi)容本質(zhì)上是表達(dá)式需要在 Python 源代碼中使用以恢復(fù)原始字符串。因此,這將包括額外的反斜杠,如上所示:
>>> s
'foo\\bar'
>>> print(repr(s))
'foo\\bar'
但這并不意味著該字符串實(shí)際上包含兩個(gè)反斜杠。
添加回答
舉報(bào)