调用带格式字符串的date命令时出现NameError如何修复?
问题原因与解决方法
你的错误是字符串引号嵌套导致的语法问题:Python里用双引号定义cmd变量时,date +"后面的双引号会提前结束整个字符串,剩下的%a会被Python当成未定义的变量,所以抛出NameError。
下面是三种可行的修复方案:
方案1:用单引号包裹整个命令字符串
把外层的双引号换成单引号,这样内部的双引号就不会被Python误解析:
import subprocess cmd = 'date +"%a %b %d %r"' date = subprocess.check_output(cmd, shell=True)
方案2:转义内部的双引号
在内部的双引号前添加反斜杠\,告诉Python这是字符串的一部分,不是结束标记:
import subprocess cmd = "date +\"%a %b %d %r\"" date = subprocess.check_output(cmd, shell=True)
方案3:推荐——不用shell=True,拆分命令为列表(更安全)
shell=True存在潜在的shell注入风险,更规范的写法是把命令和参数拆分成列表传递,这样不需要处理引号嵌套:
import subprocess cmd = ['date', '+%a %b %d %r'] date = subprocess.check_output(cmd)
终端里直接运行命令没问题,是因为shell会直接处理引号的嵌套逻辑,和Python的字符串解析规则不同。
内容的提问来源于stack exchange,提问作者Carl Cornett
相关产品推荐
相关产品推荐

