############## CONTEXT ############## Running PyMol 2.4 on Ubuntu 20.04.1 LTS.
I'm launching the PyMol's GUI from a Python script executed from the shell like this: python my_script.py A virtual environment is activated. This venv takes PyMol's Python interpreter from ~/pymol/bin/. I import the pymol module inside the script following these instructions ( https://pymolwiki.org/index.php/Launching_From_a_Script): import pymol pymol.finish_launching(['pymol']) ############## THE ISSUE ############## My program continuously writes PNG images within a loop with the following command: cmd.png("./my_image", width=84, height=84, dpi=-1.0, ray=0, quiet=1) When turning the parameter quiet=1 it's supposed to work quietly. But it keeps printing the following message in the stdout over and over again each time it writes an image on disk inside the loop: ScenePNG: wrote 84x84 pixel image to file "./my_image.png". My program is also printing some debugging information, so this unnecessary message is quite annoying and spoils my output. I also tried to disable it with the following command line option when importing the pymol library in the script (seen in https://pymolwiki.org/index.php/Command_Line_Options): import pymol pymol.finish_launching(['pymol', '-Q']) But it doesn't work either. If I was running the program without GUI, I could try to redirect the stdout to “nothing” with some of these clever tricks ( https://stackoverflow.com/questions/6735917/redirecting-stdout-to-nothing-in-python). For example, using the following function: @contextmanager def stdout_redirected(to=os.devnull): fd = sys.stdout.fileno() def _redirect_stdout(to): sys.stdout.close() os.dup2(to.fileno(), fd) sys.stdout = os.fdopen(fd, 'w') with os.fdopen(os.dup(fd), 'w') as old_stdout: with open(to, 'w') as file: _redirect_stdout(to=file) try: yield finally: _redirect_stdout(to=old_stdout) And then do this: with stdout_redirected(): cmd.png("./my_image", width=84, height=84, dpi=-1.0, ray=0, quiet=1) This trick worked for me in the past. But since I need the GUI now, I get the following error: Traceback (most recent call last): File "mvdqn_train.py", line 525, in <module> main() File "mvdqn_train.py", line 386, in main env = gym.make("docking-v0", kwargs=env_args) File "/home/aserrano/pymol/lib/python3.7/site-packages/gym/envs/registration.py", line 145, in make return registry.make(id, **kwargs) File "/home/aserrano/pymol/lib/python3.7/site-packages/gym/envs/registration.py", line 90, in make env = spec.make(**kwargs) File "/home/aserrano/pymol/lib/python3.7/site-packages/gym/envs/registration.py", line 60, in make env = cls(**_kwargs) File "/home/aserrano/projects/mvdqn/gym-docking-vis/gym_docking_vis/envs/docking_env.py", line 128, in __init__ self.initial_state = generate_images(None, self.views, self.num_views, self.input_height, self.input_width, self.n_channels) File "/home/aserrano/projects/mvdqn/gym-docking-vis/gym_docking_vis/envs/utils_env.py", line 636, in generate_images with stdout_redirected(): File "/home/aserrano/pymol/lib/python3.7/contextlib.py", line 112, in __enter__ return next(self.gen) File "/home/aserrano/projects/mvdqn/gym-docking-vis/gym_docking_vis/envs/utils_env.py", line 682, in stdout_redirected fd = sys.stdout.fileno() AttributeError: module 'pcatch' has no attribute 'fileno' Any clue to solve this issue? Thx. Cheers, Antonio -- "Este mensaje es privado y confidencial y se dirige exclusivamente a su destinatario. Si usted recibe este mensaje por error, no debe revelar, distribuir o copiar este e-mail. Por favor, comuníquelo al remitente y borre el mensaje y los archivos adjuntos de su sistema. No hay renuncia a la confidencialidad ni a ningún privilegio a causa de una transmisión errónea o por mal funcionamiento". "This message is private and confidential and it is intended exclusively for the addressee. If your receive this message by mistake, you should not disseminate, distribute or copy this e-mail. Please inform the sender and delete the message and attachments from your system. No confidentiality or any privilege regarding the information is waived or lost by any mistransmission or malfunction". No me imprimas si no es necesario.Don't print me unless it's necessary.
_______________________________________________ PyMOL-users mailing list Archives: http://www.mail-archive.com/pymol-users@lists.sourceforge.net Unsubscribe: https://sourceforge.net/projects/pymol/lists/pymol-users/unsubscribe