|
|
最近闲来无事安装了最新版的win版本的ORCA:Orca.6.1.1.Win64_msmpi.zip(安装很简单,论坛就有往期版本安装的教程量子化学程序ORCA的安装方法 - 量子化学 (Quantum Chemistry) - 计算化学公社)尽管可以通过cmd等提交任务,如:D:\study\ORCA_6.0.0\orca H2CO.inp > H2CO.out,或者使用:"在Windows下使用ORCA的最便捷方法" 安装cmder来调用ORCA(这个方法本人暂时还没上手)
本人图省事用deepseek写了一个脚本(我基本不懂脚本,只是尝试后能用,特来分享记录)来自动化运行inp文件,并将结果输入到out文件中,py脚本内容如下,可自行复制到txt文件中,并把文件后缀改成py,双击之后便可自动执行(安装脚本之前要安装python,我的python 3.14,并把路径改成实际自己的路径,另外ORCA最好直接安装在D盘(或其他盘)下,如D:\ORCA611,装在子文件夹会报错(原因暂不明)):
脚本说明:双击脚本会自动依次执行同文件目录下的inp文件(执行时会弹出cmd命令框,执行完成或报错会在命令框提醒,关闭cmd命令框可杀掉任务),亦可遍历子文件夹中的inp文件并执行(拆分文件夹执行会更好,有条理,也避免报错)。
文件暂时无法上传,脚本如下,欢迎大佬提出意见优化脚本:
import os
import subprocess
import sys
from pathlib import Path
# ================= 配置(请务必修改) =================
ORCA_EXE = r"D:\ORCA611\orca.exe" # 改成你的实际路径
# =====================================================
def find_inp_files(root_dir):
inp_files = []
for dirpath, _, filenames in os.walk(root_dir):
for fname in filenames:
if fname.lower().endswith(".inp"):
inp_files.append(Path(dirpath) / fname)
return inp_files
def run_orca(inp_path, original_cwd):
work_dir = inp_path.parent
inp_name = inp_path.name
out_name = inp_path.stem + ".out"
out_path = work_dir / out_name
print(f"\n{'='*60}")
print(f"输入文件: {inp_path}")
print(f"工作目录: {work_dir}")
# 检查输入文件
if not inp_path.exists():
print("❌ 输入文件不存在,跳过")
return
# 检查ORCA可执行文件
orca_path = Path(ORCA_EXE)
if not orca_path.exists():
print(f"❌ 找不到ORCA程序:{ORCA_EXE}")
print(" 请确认路径和文件名是否正确。")
return
# 切换工作目录
try:
os.chdir(work_dir)
except Exception as e:
print(f"❌ 无法进入目录 {work_dir}:{e}")
return
# 构建命令(绝对路径调用ORCA,输入文件用相对路径)
cmd = f'"{orca_path}" {inp_name} > "{out_name}" 2>&1'
print(f"执行命令:{cmd}")
try:
result = subprocess.run(cmd, shell=True, check=False, capture_output=True, text=True)
if result.returncode == 0:
print(f"✅ 计算成功!输出文件:{out_path}")
else:
print(f"❌ 计算失败,返回码:{result.returncode}")
if result.stderr:
print("错误信息(前500字符):")
print(result.stderr[:500])
# 若输出文件存在,打印最后几行辅助诊断
if out_path.exists():
with open(out_path, 'r', encoding='utf-8', errors='ignore') as f:
lines = f.readlines()
if lines:
print("输出文件最后10行:")
print(''.join(lines[-10:]))
except Exception as e:
print(f"❌ 运行异常:{e}")
finally:
os.chdir(original_cwd) # 恢复原始目录
def main():
original_cwd = os.getcwd()
root_dir = Path.cwd() # 脚本所在目录,或改为你的总文件夹路径
print(f"扫描根目录:{root_dir}")
inp_files = find_inp_files(root_dir)
if not inp_files:
print("未找到任何 .inp 文件。")
input("按 Enter 退出...")
return
print(f"找到 {len(inp_files)} 个 .inp 文件:")
for f in inp_files:
print(f" - {f}")
for inp_path in inp_files:
run_orca(inp_path, original_cwd)
print("\n所有任务处理完毕。")
input("按 Enter 退出...") # 防止闪退
if __name__ == "__main__":
main()
|
|