Работа с каталогами - Python - PullRequest
       10

Работа с каталогами - Python

2 голосов
/ 26 сентября 2011

У меня есть следующий фрагмент кода 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 ]

3 голосов
/ 26 сентября 2011

os.makedirs получает относительный путь (на основе ./tmp) и вызывается после вызовов chdir (см. Инициализацию и использование dest)

0 голосов
/ 26 сентября 2011

Как уже говорилось, источником этого является цикл

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).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...