我尝试将一些dos命令从我的批处理文件移动到python但是得到此错误,文件名,目录名或卷标语法不正确,对于以下语句.
subprocess.Popen('rd /s /q .\ProcessControlSimulator\bin', shell=True,
stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
Run Code Online (Sandbox Code Playgroud)
如果我只是将dos命令复制到窗口控制台,它的工作原理.os.getcwd()给了我预期的工作目录.
我的问题是:1.为什么?2.如何避免?我是否需要获取当前工作目录并为该命令构造一个抽象路径?怎么做?
谢谢
Ban*_*i-T 12
\(反斜杠)是字符串常量中的转义字符,因此您的字符串最终会更改.在字符串常量中使用double \s(如此\\):
subprocess.Popen('rd /s /q .\\ProcessControlSimulator\\bin', shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
Run Code Online (Sandbox Code Playgroud)
我的建议是尽量不要不必要地使用系统命令.您正在使用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"
Run Code Online (Sandbox Code Playgroud)
还有其他的,比如os.removedirs,os.remove你可以从文档中看一看.
你有未转义的反斜杠.你可以使用python原始字符串来避免转义斜线,或者将它们加倍:
subprocess.Popen(r'rd /s /q .\ProcessControlSimulator\bin', shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
Run Code Online (Sandbox Code Playgroud)
要么
subprocess.Popen('rd /s /q .\\ProcessControlSimulator\\bin', shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
Run Code Online (Sandbox Code Playgroud)