Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

478
Views
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 answers
Answer question

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 Report

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!