使用目录 - Python

时间:2011-09-26 07:13:47

标签: python directory-structure

我有以下的python代码。该代码应该从用户获取源,临时和最终输出路径并提取一些头文件。当从终端指定完整路径时,程序可以正常工作,但终端命令如下:

Python Get-iOS-Private-SDKs.py -p /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.3.sdk/System/Library/PrivateFrameworks/ -t ./tmp -f ./Test.txt,然后是头文件,而不是在当前目录的tmp文件夹中生成,它们进入递归循环。每个文件夹都有一个tmp文件夹,它会一直打开。谁能告诉我为什么?

import optparse,os,subprocess
from glob import glob

parser = optparse.OptionParser()
parser.add_option("-p","--path", help = "Source path", dest = "Input_Path", metavar = "PATH")
parser.add_option("-t","--temp",help = "Temporary Folder Path", dest = "Temp_Path", metavar = "PATH")
parser.add_option("-f","--file",help = "Destination Path",dest ="Output_Path",metavar = "PATH")
(opts,args) =parser.parse_args()

if (opts.Input_Path is None or opts.Output_Path is None or opts.Temp_Path is None):
    print "Error: Please specify the necessary paths"

else:
    os.makedirs(opts.Temp_Path + "Private_SDK")
    dest = opts.Temp_Path + "Private_SDK/"
    for root,subFolders,files in os.walk(opts.Input_Path):
        for file in files:
                os.makedirs(dest + file)
                os.chdir(dest + file)
                command = ['/opt/local/bin/class-dump','-H',os.path.join(root,file)]
                subprocess.call(command)

该文件夹也不会被创建为Private_SDK,它被创建为tmpPrivate_SDK。基本上,如果我能够在提到./tmp时从终端获得完整路径,我可以让程序运行!

2 个答案:

答案 0 :(得分:3)

os.makedirs获取相对路径(基于./tmp)并在调用chdir后调用(参见dest初始化和使用)

答案 1 :(得分:0)

如前所述,循环

for file in files:
    os.makedirs(dest + file)
    os.chdir(dest + file)
    command = ['/opt/local/bin/class-dump','-H',os.path.join(root,file)]
    subprocess.call(command)

是这个的来源。

相反,你应该

  • 使用绝对路径 - 需要在使用wd = os.getcwd()的所述循环之前获取当前工作目录,并以这种方式修改dest,使其具有absdest = os.path.join(wd, dest)并工作有了这个。 (此外,您应该使用os.path.join()代替dest + file更好地开展更多工作。

  • 或在子进程调用后始终返回“旧”工作目录。在这里,您还需要wd = os.getcwd()部分,之后需要os.chdir(wd)