如何通过PyMOLPy3将PyMOL控制台命令及输出保存至TXT文件
解决PyMOLPy3捕获命令输出到文本文件的问题
直接捕获iterate_state结果(推荐)
不用依赖控制台输出重定向,直接将iterate_state的结果存入Python变量,再写入文件,这是最可靠的方式:
from pymol import cmd # 加载目标结构 cmd.load("target_protein.pdb") # 初始化列表存储氨基酸三字母缩写 aa_abbrs = [] # 执行iterate_state,将结果直接追加到列表 cmd.iterate_state(1, "all", "aa_abbrs.append(resn)") # 写入文本文件 with open("aa_residues.txt", "w", encoding="utf-8") as f: for abbr in aa_abbrs: f.write(f"{abbr}\n")
捕获所有控制台命令与输出(官方日志方法)
如果需要记录PyMOL控制台的所有操作和输出,用PyMOL内置的log_open方法,这比手动重定向stdout更准确,不会出现空文件问题:
from pymol import cmd # 开启日志记录,mode="w"会覆盖旧文件,mode="a"为追加 cmd.log_open("pymol_full_log.txt", mode="w") # 执行你的操作命令 cmd.load("target_protein.pdb") cmd.iterate_state(1, "all", "print(resn)") # 关闭日志 cmd.log_close()
为什么之前的重定向方法无效?
PyMOL的内部控制台输出并非直接流向系统的stdout,而是通过自身的日志系统处理。普通的sys.stdout重定向、系统命令行输出重定向都无法捕获这部分内容,必须使用PyMOL官方提供的日志接口,或者直接在命令中把结果存入Python变量。
内容的提问来源于stack exchange,提问作者Arpel
相关产品推荐
相关产品推荐

