2012-04-09 5 views
1

Ich versuche, eine Datei einzulesen und einen Hash der Datei zu erzeugen. In den meisten Fällen ist dies reibungslos verlaufen. Es gibt jedoch ein paar Dateien, mit denen ich nicht umgehen kann. Zum Beispiel:Eine Datei kann nicht mit dem Befehl win32 dir und dem Python-Subprozess angezeigt werden.

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

Erzeugt den Fehler: IOError: [Errno 2] No such file or directory: 'c:\\windows\\system32\\nvvsvc.exe

ähnlich der Befehl:

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

die Fehler produziert:

File Not Found

Traceback (most recent call last):

File "< stdin >", line 1, in < module >

File "C:\Python27\lib\subprocess.py", line 544, in check_output

raise CalledProcessError(retcode, cmd, output=output)

subprocess.CalledProcessError: Command 'dir c:\windows\system32\nvvsvc.exe' returned non-zero exit status 1

ich davon viele Variationen ausprobiert, darunter versuchen um sogar cacls.exe zuzugeben, dass dort eine Datei ist. Wenn ich jedoch die Python-Instanz (exit()) verlasse und eine dir c:\windows\system32\nvvsvc.exe führe, wird zurückgegeben, dass dort tatsächlich eine Datei vorhanden ist.

Ein ähnlicher Test mit calc.exe erlaubt mir, es zu sehen und es beide gut aus dem Inneren Python Hash.

Ich verwende Python 2.7. Ich habe versucht, Python mit administrativen Privilegien zu starten (laufen als Administrator für die Eingabeaufforderung), aber das ändert nichts. Es scheint einige Privilegienänderungen zu geben, wenn man von innerhalb von Python läuft, bis das Dateisystem im Wesentlichen vorgibt, dass die Datei nicht in Python existiert.

Als Referenz ist der Besitzer der fraglichen Datei (es gibt andere, die ähnlich sind), ist System, und die CACLs auf der Datei erlauben das Lesen von Benutzer, Admin und System.

+3

Klingt wie ein Berechtigungsproblem. Laufen Sie von einer [erhöhten Eingabeaufforderung] (http://windows.microsoft.com/en-US/windows-vista/Command-Prompt-frequently-asked-questions)? –

Antwort

1

Einfache Antwort! (aber nicht unbedingt leicht zu finden) In Bezug auf den IOError, ist es, weil Sie Backslashes nicht entkommen müssen.

Der zweite Teil sieht wie ein Genehmigungsfehler aus, wie in den obigen Kommentaren erwähnt.

+0

bearbeitet dies nach dem Lesen der neuen Eingabe des Fragestellers. –

+0

Also habe ich es auch mit rohen formatierten Strings versucht (also kein doppelter Dateiname) auf den gleichen Fehler. Auch habe ich es mit und ohne eine erhöhte Eingabeaufforderung versucht. Es scheint die Dinge nicht zu ändern. – fantadisco

+0

Ich weiß, dass es eine Weile her ist, seit du das gepostet hast, aber hast du dir die [python docs on subprocesses] angesehen (http://docs.python.org/library/subprocess.html)? Sie sprechen über den Fehler und sie könnten eine Idee darüber aufkommen lassen, was zu tun ist. –

0

Ist dies der 64-Bit-System versuchen Sie dies:

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

Der Schlüssel hier ist "Sysnative"

Verwandte Themen