Чтение цели символической ссылки / точки соединения в win32 (через Python) - PullRequest
2 голосов
/ 23 марта 2011

Задача и фон:
Чтобы создать, прочитать обратно, удалить ссылки на каталоги (на данный момент) на платформе win32.
Подход, который используется в моем коде Python, следующий:
a,Пытается создать реальную символическую ссылку, если поддерживается (через mklink cmd)
b.Если не поддерживается, возвращается к созданию соединения pt, если это поддерживается (через cmd linkd)
Чтение и удаление следуют тому же подходу.

Проблема:
Создание и удаление символической ссылки и junc pt не вызывает затруднений, но я не мог понять, как прочитать цель, то есть указательный каталог.

Ход выполнения:
а.Для точек соединения я могу использовать 'linkd' и безобразно анализировать стандартный вывод, чтобы получить целевой каталог.
b.Для символической ссылки, похоже, нет такого решения.
c.Я вижу, что в python 3.1.1 [1] есть встроенная поддержка символических ссылок win32, но я использую v2.7.1 и не могу обновить сейчас.д.В модуле pywin32 есть метод для создания символической ссылки, но я ничего не вижу, чтобы прочитать его обратно

ps я довольно плохо знаком с Python, поэтому, если есть альтернативный подход, позволяющий легко это сделать, пожалуйста, сообщите мне.

[1] [http://bugs.python.org/issue1578269][1]

Ответы [ 3 ]

1 голос
/ 23 марта 2011

Это все о точках повторной обработки .

Эта статья Code Project должна предоставить вам необходимую информациюВам придется перевести его на Python с помощью ctypes или win32api.

0 голосов
/ 13 апреля 2013

Библиотека Win32file у меня тоже не работает. Но если у вас есть Junction , вы можете использовать это (просто измените Junction path, чтобы соответствовать вашему):

def getOriginalPath(junctionPath):
    # TCPROGS - system env. variable
    cmd = subprocess.Popen('%TCPROGS%\Junction\junction.exe '+junctionPath, shell=True, stdout=subprocess.PIPE)
    for line in cmd.stdout:
        if line.find('Substitute Name:') >= 0:
            start = line.find(':')
            return line[start+1:].strip()
            break

Вы также можете проанализировать вывод DIR /A:L, если не хотите зависеть от Junction.

0 голосов
/ 21 января 2012

Здесь вы найдете фрагмент для чтения символических ссылок с помощью модуля win32file , в дополнение к нескольким постам о том, как создавать символические ссылки с помощью модуля ctypes.Я также написал здесь Python C-Extension , реализующий соединения, символические ссылки и жесткие ссылки в Windows, хотя я должен предупредить вас, что он нуждается в серьезной переработке.(Написал это до того, как приступил к чтению Python C-Extensions, поэтому я не поставил на место соответствующие Py_XREF, etcs)

Существует также реализация чтения, записи и проверки соединений с использованием только модуля ctypes.где-то в этом хранилище.

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