Como ler um descritor de arquivo aberto fora do processo de escrita

0

Como você abre um descritor de arquivo e o ecoa em um terminal enquanto ele está sendo gravado de um processo?

Eu tenho um programa de backup, Duplicity, que grava seus logs em um descritor de arquivo especificado pelo parâmetro --log-fd=16 .

Sem dúvida, se eu executar lsof -p <duplicity PID> , vejo:

python2 9224 myuser    0r      CHR                1,3      0t0         6 /dev/null
python2 9224 myuser    1w      CHR                1,3      0t0         6 /dev/null
python2 9224 myuser    2w      CHR                1,3      0t0         6 /dev/null
python2 9224 myuser    3u  a_inode               0,11        0      7005 [eventfd]
python2 9224 myuser    4u     unix 0x0000000000000000      0t0    158199 type=STREAM
python2 9224 myuser    5u  a_inode               0,11        0      7005 [eventfd]
python2 9224 myuser    6u  a_inode               0,11        0      7005 [eventfd]
python2 9224 myuser    7r      DIR                8,3     4096  22414346 <some random file being accessed during the backup>
python2 9224 myuser    8r      CHR                1,9      0t0        11 /dev/urandom
python2 9224 myuser   15r     FIFO               0,10      0t0    157054 pipe
python2 9224 myuser   16w     FIFO               0,10      0t0    157054 pipe

No entanto, se eu tentar abrir o descritor de arquivo no Python, recebo um erro:

>>> import os
>>> os.fdopen(16)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
OSError: [Errno 9] Bad file descriptor

Por que isso? Como faço para ler o descritor de arquivos?

    
por Cerin 24.05.2017 / 21:52

1 resposta

0

Acredito que a opção --log=fd da duplicidade se destina a pipelines complexos em que você deseja separar stderr e stdout de seu log.

Esta resposta a esta questão dá uma exemplo. Aqui está um exemplo simples:

#!/bin/sh
# Generate output on three different fds
echo hello >&3
echo world >&2
echo today >&1

E quando executado assim,

./foo 2> 2.log 3> 3.log 1> 1.log

Resultados em

$ cat 1.log 2.log 3.log
today
world
hello
    
por 24.05.2017 / 23:29

Tags