我正在尝试在主路径中创建一个目录,并在使用os.path.exists()重新创建之前重新检查主目录路径中是否存在该目录,但它没有按预期工作。
if os.access("./", os.W_OK) is not True:
print("Folder not writable")
dir_name_tmp = subprocess.Popen('pwd', stdout=subprocess.PIPE, shell=True)
dir_name_tmp = dir_name_tmp.stdout.read()
dir_name = dir_name_tmp.split('/')[-1]
dir_name = dir_name.rstrip()
os.system('ls ~/')
print "%s"%dir_name
if not os.path.exists("~/%s"%(dir_name)):
print "Going to create a new folder %s in home path\n"%(dir_name)
os.system('mkdir ~/%s'%(dir_name))
else:
print "Folder %s Already Exists\n"%(dir_name)
os.system('rm -rf ~/%s & mkdir ~/%s'%(dir_name, dir_name))
else :
print("Folder writable")
第一次输出:
Folder not writable
Desktop Downloads Perforce bkp doc project
hello.list
Going to create a new folder hello.list in home path
第二次输出:
Folder not writable
Desktop Downloads Perforce bkp doc hello.list project
hello.list
Going to create a new folder hello.list in home path
mkdir: cannot create directory `/home/desperado/hello.list': File exists
虽然目录存在,但它不会进入else循环。我错过了什么吗?分享你的输入!
更新了工作代码并提供了建议:使用$ HOME目录和os.path.expandusr
if os.access("./", os.W_OK) is not True:
log.debug("Folder Is Not writable")
dir_name_tmp = subprocess.Popen('pwd', stdout=subprocess.PIPE, shell=True)
dir_name_tmp = dir_name_tmp.stdout.read()
dir_name = dir_name_tmp.split('/')[-1]
dir_name = dir_name.rstrip()
log.debug("dir_name is %s"%dir_name)
dir_name_path = (os.path.expanduser('~/%s'%(dir_name))).rstrip()
log.debug("dir_name_path is %s"%(dir_name_path))
# if not os.path.exists('~/%s'%(dir_name)):
if not os.path.exists('%s'%(dir_name_path)):
log.debug("Going to create a new folder %s in home path\n"%(dir_name))
os.system('mkdir $HOME/%s'%(dir_name))
else:
log.debug("Folder %s Already Exists\n"%(dir_name))
os.system('rm -rf %s'%(dir_name_path))
os.system('mkdir $HOME/%s'%(dir_name))
else :
log.debug("Folder Is Writable")
答案 0 :(得分:5)
表示主目录的波形符号~
是shell约定。它由os.system
中的shell扩展,但在字面上理解为Python。
所以你创建<HOME>/<DIR>
,但要测试~/<DIR>
。
答案 1 :(得分:1)
正如VPfB所提到的,字面意思是波形符号由Python理解。要解决此问题,您需要获取实际的主目录。
现在,在不同的平台上,主目录有不同的路径。
要获取主目录,os.path.expanduser
将非常有用。
>>> import os
>>> os.path.expanduser("~")
'/Users/ashish'