2
gap = "dir c:\\PROGRA~2\\td\\conf\\ga.db3"
print gap
cmd = shlex.split('cmd "/c ' + gap+'"', posix=False)
print cmd
o = subprocess.call(cmd)
print o

上面的脚本我在 Windows 上运行,它根本不起作用。我只想远程搜索文件“ga.db3”是否存在。请告诉我。

The output is: File Not Found
4

1 回答 1

2

您必须使用posix=True来删除转义的引号。

有关 POSIX 和非 POSIX 之间的区别,请阅读行下方或从docs中读取。


非POSIX模式下的解析规则

  • 单词中无法识别引号字符(Do"Not"Separate被解析为单个单词Do"Not"Separate
  • 无法识别转义字符
  • 用引号括起来的字符保留引号内所有字符的字面值;
  • 右引号分隔单词("Do"Separate被解析为"Do"and Separate
  • 如果 whitespace_split 为 False,则任何未声明为单词字符、空格或引号的字符都将作为单字符标记返回。如果为 True,则 shlex 只会在空格中分割单词
  • EOF 用空字符串 ( '')发出信号
  • 即使被引用,也无法解析空字符串。

POSIX模式下的解析规则

  • 引号被剥离,并且不分隔单词("Do"Not"Separate"被解析为单个单词DoNotSeparate
  • 不带引号的转义字符(例如'\')保留下一个字符的字面值
  • 将不属于转义引号一部分的字符括在引号中(例如"'")保留引号内所有字符的文字值
  • 将字符括在引号中,这些字符是转义引号的一部分(例如,'"')保留引号内所有字符的字面值,但转义中提到的字符除外。转义字符仅在使用中的引号或转义字符本身时才保留其特殊含义。否则转义字符将被视为普通字符。EOF 用 None 值发出信号
  • ''允许带引号的空字符串 ( )
于 2014-03-11T17:58:16.833 回答