Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

465
Visualizações
Encontrar de qué archivos se están leyendo durante una sesión (código python)

Tengo un gran sistema escrito en python. cuando lo ejecuto, lee todo tipo de datos de muchos archivos diferentes en mi sistema de archivos. Hay miles de líneas de código y cientos de archivos, la mayoría de ellos en realidad no se utilizan. Quiero ver a qué archivos accede realmente el sistema (ubuntu) y, con suerte, en qué parte del código se abren. Los nombres de archivo se deciden dinámicamente usando variables, etc., por lo que los nombres de archivo reales no se pueden determinar simplemente mirando el código. Tengo acceso al código, por supuesto, y puedo cambiarlo.

Trato de averiguar cómo hacer esto de manera eficiente, con cambios mínimos en el código:

  1. ¿Hay alguna forma de Linux para determinar a qué archivos se accede y en qué momento? esto podría ser útil, aunque no me dirá en qué parte del código sucede esto
  2. ¿Existe una manera simple de hacer que un comando de "archivo abierto" también registre el nombre del archivo, la hora, etc. del archivo abierto? con suerte, sin tener que entrar en el código y cambiar cada comando abierto, hay muchos de ellos, y algunos no se usan en tiempo de ejecución.

Gracias

over 4 years ago · Santiago Trujillo
3 Respostas
Responde à pergunta

0

Puede rastrear accesos a archivos sin modificar su código, usando strace. O comienzas tu programa con strace, así

 strace -f -e trace=file your_program.py

De lo contrario, adjunta strace a un programa en ejecución como este

 strace -f -e trace=file -p <PID>
over 4 years ago · Santiago Trujillo Relatório

0

Para 1 - Puedes usar

 ls -la /proc/<PID>/fd`

Reemplazando <PID> con su ID de proceso. Tenga en cuenta que le dará todos los descriptores de archivos abiertos, algunos de ellos son stdin stdout stderr y, a menudo, otras cosas, como open websockets (que usan un descriptor de archivo), sin embargo, filtrarlo por archivos debería ser fácil.

Para 2: vea la excelente solución propuesta aquí: anule la función de apertura de python cuando se usa con la palabra clave 'as' para imprimir cualquier cosa

por ejemplo, reemplazando la función abierta con la suya propia, lo que podría incluir el registro adicional.

over 4 years ago · Santiago Trujillo Relatório

0

Un método posible es "sobrecargar" la función open . Esto tendrá muchos efectos que dependen del código, así que lo haría con mucho cuidado si fuera necesario, pero básicamente aquí hay un ejemplo:

 >>> _open = open >>> def open(filename): ... print(filename) ... return _open(filename) ... >>> open('somefile.txt') somefile.txt Traceback (most recent call last): File "<stdin>", line 1, in <module> File "<stdin>", line 3, in open FileNotFoundError: [Errno 2] No such file or directory: 'somefile.txt'

Como puede ver, mi nueva función open devolverá la open original (renombrada como _open ), pero primero imprimirá el argumento (el nombre del archivo). Esto se puede hacer con más sofisticación para registrar el nombre del archivo si es necesario, pero lo más importante es que debe ejecutarse antes de cualquier uso de open en su código.

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda