Wie führe ich Low-Level-I / O auf Linux-Gerätedateien in Python aus?

8

Ich habe ein Gerät, das als Antwort auf Befehle, die in die Gerätedatei geschrieben wurden, eine Zeichenkette zurückgibt. Ich bin in der Lage, Befehle auf das Gerät zu schreiben und die Rückgabezeichenfolge in C mit Code zu lesen, der wie folgt aussieht:

%Vor%

Versuchen Sie dasselbe in Python mit:

%Vor%

Der Schreibvorgang ist erfolgreich, es wird jedoch nur eine leere Zeichenfolge zurückgegeben. Was fehlt mir hier?

    
Anmol Sarma 29.01.2014, 07:09
quelle

2 Antworten

6

Gemäß der Dokumentation os.write :

  

Hinweis: Diese Funktion ist für Low-Level-E / A vorgesehen und muss auf einen Dateideskriptor angewendet werden, der von os.open() oder pipe() zurückgegeben wird. Um ein "Dateiobjekt" zu schreiben, das von der integrierten Funktion open() oder von popen() oder fdopen() oder sys.stdout oder sys.stderr zurückgegeben wird, verwenden Sie die Methode write() .

Sie sollten hier nicht mischen und passen. Wenn Sie die globale Funktion open() verwenden, um eine Datei zu öffnen, müssen Sie nur die Methoden read() und write() des Dateiobjekts verwenden. Umgekehrt, wenn Sie os.open() verwenden, um eine Datei zu öffnen, müssen Sie nur os.read() und os.write() verwenden.

Versuchen Sie also, Ihren Aufruf an open() mit os.open() ; oder, behalte den open() -Aufruf und ersetze os.write(dev, ...) durch dev.write(...) und ersetze os.read(dev, ...) durch dev.read(...) .

    
Adam Rosenfield 29.01.2014 07:29
quelle
1

Fügen Sie eine os.lseek () hinzu, um an den Anfang der von Ihnen geschriebenen Zeichenfolge zu suchen. Zur Zeit haben Sie 16 Bytes geschrieben, die den Zeiger weiterleiten. Wenn Sie lesen, beginnen Sie mit dem Lesen des aktuellen Zeigers, so dass Sie ihn bis zum Anfang des geschriebenen Textes sichern müssen. Das hat für mich funktioniert:

%Vor%     
ttwalkertt 30.10.2015 16:52
quelle

Tags und Links