exec_plugin.cpp

来自「ncbi源码」· C++ 代码 · 共 211 行

CPP
211
字号
/* * =========================================================================== * PRODUCTION $Log: exec_plugin.cpp,v $ * PRODUCTION Revision 1000.6  2004/06/01 20:56:02  gouriano * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.18 * PRODUCTION * =========================================================================== *//*  $Id: exec_plugin.cpp,v 1000.6 2004/06/01 20:56:02 gouriano Exp $ * =========================================================================== * *                            PUBLIC DOMAIN NOTICE *               National Center for Biotechnology Information * *  This software/database is a "United States Government Work" under the *  terms of the United States Copyright Act.  It was written as part of *  the author's official duties as a United States Government employee and *  thus cannot be copyrighted.  This software/database is freely available *  to the public for use. The National Library of Medicine and the U.S. *  Government have not placed any restriction on its use or reproduction. * *  Although all reasonable efforts have been taken to ensure the accuracy *  and reliability of the software and data, the NLM and the U.S. *  Government do not and cannot warrant the performance or results that *  may be obtained by using this software or data. The NLM and the U.S. *  Government disclaim all warranties, express or implied, including *  warranties of performance, merchantability or fitness for any particular *  purpose. * *  Please cite the author in any work or product based on this material. * * =========================================================================== * * Authors:  Josh Cherry * * File Description:  Execute an external program as a plugin * */#include <ncbi_pch.hpp>#include <gui/utils/exec.hpp>#include "../basic/output_dlg.hpp"#include <gui/core/idocument.hpp>#include <gui/core/plugin_utils.hpp>#include <gui/plugin/PluginRequest.hpp>#include <gui/plugin/PluginInfo.hpp>#include <gui/plugin/PluginCommandSet.hpp>#include <gui/plugin/PluginValueConstraint.hpp>#include <gui/core/version.hpp>#include "exec_plugin.hpp"#include "plugin_args_as_strs.hpp"#include <objmgr/util/sequence.hpp>#include <objmgr/scope.hpp>#include <objmgr/seq_vector.hpp>#include <objects/seqloc/Seq_loc.hpp>#include <connect/ncbi_pipe.hpp>#include <cgi/ncbicgi.hpp>BEGIN_NCBI_SCOPEUSING_SCOPE(objects);// stuff for running external appsvoid CExecPlugin::GetInfo(CPluginInfo& info){    info.Reset();    // version info macro    info.SetInfo(CPluginVersion::eMajor, CPluginVersion::eMinor, 0,                 string(__DATE__) + " " + string(__TIME__),                 "CExecPlugin", "This should not appear in a menu",                 "An interface for running external executables",                 "");    // command info    CPluginCommandSet& cmds = info.SetCommands();    CPluginCommand&    args = cmds.AddAlgoCommand(eAlgoCommand_run);    args.AddArgument("locs", "Sequences to evaluate",                     CSeq_loc::GetTypeInfo(),                     CPluginArg::TData::e_Array);    args.SetConstraint("locs",                       *CPluginValueConstraint::CreateSeqSameMol());    args.AddArgument("__executable_path", "path name to executable",                     CPluginArg::eString);}void CExecPlugin::RunCommand(CPluginMessage& msg){    const CPluginCommand& args = msg.GetRequest().GetCommand();    CPluginReply& reply = msg.SetReply();    _TRACE("CExecPlugin::Run()");    if ( !m_OutputDlg.get() ) {        m_OutputDlg.reset(new COutputDlg());    }    m_OutputDlg->SetTitle("Results of executing external app");    const CPluginArgSet_Base::Tdata& argset = args.GetArgs().Get();    vector<string> keys, values;    try {        PluginArgsAsStrs(argset, keys, values);    }    catch (...) {        LOG_POST(Info << "CExecPlugin: couldn't convert to string rep");        reply.SetStatus(eMessageStatus_failed);        return;    }    keys.push_back("action");    values.push_back("run");    string std_in;    for (unsigned int i = 0;  i < keys.size();  i++) {        if (i > 0) {            std_in += '&';        }        std_in += URL_EncodeString(keys[i]) + "="            + URL_EncodeString(values[i]);    }        string std_out, std_err;    vector<string> arguments;    CExecute::Exec(args["__executable_path"].AsString(), arguments,                   std_in, std_out, std_err );    string str;    str += "standard output:\n\n";    str += std_out + "\n\n";    str += "standard error:\n\n";    str += std_err + "\n\n";    m_OutputDlg->SetText(str);    m_OutputDlg->Show();    reply.SetStatus(eMessageStatus_success);}END_NCBI_SCOPE/* * =========================================================================== * $Log: exec_plugin.cpp,v $ * Revision 1000.6  2004/06/01 20:56:02  gouriano * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.18 * * Revision 1.18  2004/05/21 22:27:47  gorelenk * Added PCH ncbi_pch.hpp * * Revision 1.17  2004/01/27 18:45:22  dicuccio * Added missing header files * * Revision 1.16  2003/11/26 15:31:36  jcherry * Use external function to convert plugin arguments to strings * * Revision 1.15  2003/11/24 15:45:29  dicuccio * Renamed CVersion to CPluginVersion * * Revision 1.14  2003/11/06 21:17:19  ucko * Adjust for scope fixes in public headers. * * Revision 1.13  2003/11/04 21:17:46  dicuccio * Changed calling semantics to match new plugin API * * Revision 1.12  2003/10/28 14:06:47  dicuccio * Fixed compilation errors after change in CPluginValue * * Revision 1.11  2003/10/07 15:31:17  ucko * Fixed fallout from URL -> Value conversion * * Revision 1.10  2003/10/07 13:47:04  dicuccio * Renamed CPluginURL* to CPluginValue* * * Revision 1.9  2003/09/25 19:10:30  jcherry * Moved exec.?pp to gui/utils * * Revision 1.8  2003/09/25 17:36:27  jcherry * Renamed CExec to CExecute to avoid name conflict.  Made Exec() * really return the process's exit status. * * Revision 1.7  2003/09/04 17:34:04  ucko * Really use IDocument instead of CDocument. * * Revision 1.6  2003/09/04 14:05:24  dicuccio * Use IDocument instead of CDocument * * Revision 1.5  2003/09/03 14:46:53  rsmith * change namespace name from args to plugin_args to avoid clashes with variable names. * * Revision 1.4  2003/09/02 23:12:02  jcherry * Partial accommodation of changes to CPipe * * Revision 1.3  2003/08/25 14:00:48  jcherry * Changed to handle optional arguments that are left blank * * Revision 1.2  2003/08/21 12:03:08  dicuccio * Make use of new typedef in plugin_utils.hpp for argument values. * * Revision 1.1  2003/07/28 18:19:42  jcherry * Initial version * * =========================================================================== */

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?