2017-07-27 9 views
2

D'après ce que je sais, sys.stdout est un fichier qui représente la sortie standard d'un terminal. Cependant, lorsque je tente d'utiliser sys.stdout.seek, quels que soient les paramètres que je lui donne, il renvoie une erreur:Je ne peux pas sys.stdout.seek

IOError: [Errno 29] Illegal seek 

Que se passe-t-il? Est-ce le fait que j'utilise le TTY lui-même et non un terminal virtuel comme xterm? Comment puis-je résoudre ça?

+0

Oh, vous devez utiliser Python 2. L'erreur de Python 3.6 ressemble à ceci: 'io.UnsupportedOperation: le flux sous-jacent n'est pas accessible'. –

+3

Vous ne pouvez rechercher que dans un fichier normal. Qu'attendez-vous exactement lorsque vous cherchez dans le TTY? –

+0

C'est un fichier, mais pas un fichier. –

Répondre

2

Lorsque stdout est un TTY, il s'agit d'un périphérique de caractères et il n'est pas disponible, vous ne pouvez pas seek dans un TTY. Idem pour tell, ce n'est pas mis en œuvre:

>>> sys.stdout.tell() 
IOError: [Errno 29] Illegal seek 

Cependant, lorsque vous redirigez flux standard vers un fichier par exemple dans un shell:

$ my program > ouput.txt 

Maintenant, vous pouvez seek de stdout, stdout est maintenant un fichier .

S'il vous plaît consulter cette référence si vous travaillez avec Unix:

Understanding character device (or character special) files.