为什么这个DOS命令在Python中不工作?
我试着把一些DOS命令从我的批处理文件转到Python里,但遇到了这个错误:文件名、目录名或卷标语法不正确,出现在以下语句中。
subprocess.Popen('rd /s /q .\ProcessControlSimulator\bin', shell=True,
stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
如果我把那个DOS命令直接复制到Windows控制台里,它就能正常工作。os.getcwd()给了我预期的工作目录。
我有几个问题: 1. 这是为什么呢? 2. 怎么避免这个问题?我需要获取当前工作目录并为那个命令构建一个抽象路径吗?该怎么做呢?
谢谢
4 个回答
7
你有一些没有转义的反斜杠。你可以使用Python的原始字符串,这样就不需要对你的斜杠进行转义,或者你也可以把它们写成两个反斜杠:
subprocess.Popen(r'rd /s /q .\ProcessControlSimulator\bin', shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
或者
subprocess.Popen('rd /s /q .\\ProcessControlSimulator\\bin', shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
9
我的建议是尽量不要不必要地使用系统命令。你在用Python,所以可以利用它自带的模块。从我看到的,你是想删除文件夹,对吧?那么你可以使用像shutil这样的模块。举个例子:
import shutil
import os
path = os.path.join("c:\\","ProcessControlSimulator","bin") #example only
try:
shutil.rmtree(path)
except Exception,e:
print e
else:
print "removed"
还有其他的,比如os.removedirs和os.remove,你可以去文档里看看。
12
反斜杠 \
在字符串常量中是一个转义字符,这意味着它会改变你字符串的内容。所以在字符串中使用的时候,要用两个反斜杠 \\
,这样才能正确显示:
subprocess.Popen('rd /s /q .\\ProcessControlSimulator\\bin', shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)