bioinformatics-mcp-server
Version:
🧬 生物信息学MCP服务器 - 专为ModelScope设计的智能生物数据分析工具
59 lines (58 loc) • 2.31 kB
JavaScript
import * as fs from 'fs';
import * as path from 'path';
import { exec } from 'child_process';
import { promisify } from 'util';
import { buildCdCommand, getShellConfig } from '../utils/common.js';
const execAsync = promisify(exec);
/**
* 执行Python脚本
*/
export async function executePythonScripts(scripts, pythonCommand, executionDir) {
const executionResults = [];
for (let i = 0; i < scripts.length; i++) {
const script = scripts[i];
const scriptName = `claude_script_${i + 1}.py`;
const scriptPath = path.join(executionDir, scriptName);
// 保存脚本文件 (使用UTF-8编码)
fs.writeFileSync(scriptPath, script.code, 'utf8');
console.error(`Executing Python script ${i + 1}/${scripts.length}`);
// 记录脚本信息
if (script.lineCount) {
console.error(`📝 Script ${scriptName} has ${script.lineCount} lines`);
}
try {
// 执行Python脚本 (Windows)
const pythonCmd = `${buildCdCommand(executionDir)} && ${pythonCommand} "${scriptName}"`;
console.error(`Executing command: ${pythonCmd}`);
const { stdout, stderr } = await execAsync(pythonCmd, {
timeout: 300000, // 5分钟超时
encoding: 'utf8',
env: { ...process.env, PYTHONIOENCODING: 'utf-8' },
...getShellConfig()
});
executionResults.push({
script_number: i + 1,
script_name: scriptName,
description: script.description,
dependencies: script.dependencies,
status: 'success',
stdout,
stderr,
execution_time: new Date().toISOString()
});
}
catch (execError) {
executionResults.push({
script_number: i + 1,
script_name: scriptName,
description: script.description,
dependencies: script.dependencies,
status: 'error',
stdout: execError.stdout || '',
stderr: execError.stderr || execError.message,
execution_time: new Date().toISOString()
});
}
}
return executionResults;
}