Почему os.path.exists ("C: \\ windows \\ system32 \\ inetsrv \\ metaback") возвращает False, даже если он существует? - PullRequest
9 голосов
/ 06 февраля 2011

У меня есть программа на python, которая должна очистить несколько каталогов, и одна из них - C:\windows\system32\inetsrv\metaback; однако os.path.exists() возвращает False для этого каталога, даже если он существует (и у меня есть разрешения на доступ к нему).

Что интересно, так это то, что инструмент windirstat также полностью пропускает его.

Может кто-нибудь придумать причину, по которой это может быть, и как я могу проверить, существует ли она? Кажется, я даже не могу запустить os.listdir().

Обновление: os.path.exists() работает в этом каталоге, если окно Windows 32-разрядное, но не если оно 64-разрядное. Также правильно отображается в windirstat на 32-битной коробке.

Ответы [ 2 ]

26 голосов
/ 06 февраля 2011

Это перенаправление системных папок на работу. Когда 32-разрядный процесс выполняется в 64-разрядной версии Windows и использует путь %WINDIR%\System32, Windows заменяет %WINDIR%\SysWow64.

Функция возвращает false, чтобы сообщить вамчто C:\windows\syswow64\inetsrv\metaback не существует, и, скорее всего, оно абсолютно правильно.

Попробуйте вместо этого:

os.path.exists("C:\\windows\\sysnative\\inetsrv\\metaback")
1 голос
/ 06 февраля 2011

Безопасность в Windows x64 немного более жесткая, чем в Windows x86;особенно под текущей версией ОС (7, 2008).

Звучит так, будто у вашего скрипта фактически нет необходимых разрешений для запуска.Вообще говоря, MS заблокировала довольно много путей к каталогам (например, c: \ inetpub), которые требуют повышенных привилегий для выполнения каких-либо действий.

Для этого есть огромные причины, и обычно это считается очень хорошей вещью.1005 *

Я полагаю, что вы захотите пометить ваш скрипт (или любой другой, выполняющий его) как «Запуск от имени администратора», чтобы предоставить ему повышенный контроль.Конечно, для этого может потребоваться подтверждение выполнения через UAC.

Для получения дополнительной информации перейдите на serverfault.com и спросите там.

...