Невозможно просмотреть файл с помощью команды win32 dir и подпроцесса Python

Я пытаюсь прочитать файл и создать хэш указанного файла. По большей части это прошло гладко. Однако есть несколько файлов, с которыми я не могу справиться. Например:

file("c:\\windows\\system32\\nvvsvc.exe")

Выдает ошибку: IOError: [Errno 2] No such file or directory: 'c:\\windows\\system32\\nvvsvc.exe

Аналогично команда:

subprocess.check_output(r"dir c:\windows\system32\nvvsvc.exe", shell = True)

Выдает ошибку:

Файл не найден

Traceback (последний последний вызов):

Файл ‹ stdin ›, строка 1, в ‹ модуле ›

Файл C:\Python27\lib\subprocess.py, строка 544, в check_output

поднять CalledProcessError (реткод, cmd, вывод = вывод)

subprocess.CalledProcessError: Команда «dir c:\windows\system32\nvvsvc.exe» вернула ненулевой статус выхода 1

Я пробовал много вариантов, в том числе пытался даже заставить cacls.exe признать, что там есть файл. Однако, когда я выхожу из экземпляра python (exit()) и выполняю dir c:\windows\system32\nvvsvc.exe, он возвращает, что там действительно есть файл.

Аналогичный тест с использованием calc.exe вместо этого позволяет мне просматривать его и хэшировать как внутри Python.

Я использую Python 2.7. Я попытался запустить python с правами администратора (запуск от имени администратора для командной строки), но это ничего не меняет. Похоже, что при запуске изнутри python произошли некоторые изменения в привилегиях, поскольку файловая система по существу делает вид, что файл не существует для python.

Для справки, владельцем рассматриваемого файла (есть и другие подобные) является система, а cacls в файле позволяют читать его от пользователя, администратора и системы.


person fantadisco    schedule 09.04.2012    source источник
comment
Похоже на проблему с разрешением. Вы используете приглашение с повышенными правами?   -  person Burhan Khalid    schedule 09.04.2012


Ответы (2)


Простой ответ! (но не всегда легко найти) Что касается IOError, это потому, что вам не нужно экранировать обратную косую черту.

Вторая часть выглядит как ошибка прав доступа, как упоминалось в комментариях выше.

person Jeff Tratner    schedule 09.04.2012
comment
Поэтому я попытался сделать это и с необработанными отформатированными строками (таким образом, без двойного экранирования имени файла) с той же ошибкой. Кроме того, я пробовал это с командной строкой с повышенными правами и без нее. Кажется, это ничего не меняет. - person fantadisco; 09.04.2012
comment
Я знаю, что прошло много времени с тех пор, как вы опубликовали это, но вы просматривали документацию Python по подпроцессам< /а>? Они говорят об ошибке и могут подтолкнуть к мысли о том, что делать. - person Jeff Tratner; 18.04.2012

Если это 64-битная система, попробуйте следующее:

subprocess.check_output(r"c:\windows\SysNative\nvvsvc.exe", shell = True)

Ключ здесь "SysNative"

person Alex Okrushko    schedule 19.12.2012