OpendTect  6.3
oscommand.h
Go to the documentation of this file.
1 #pragma once
2 
3 /*+
4 ________________________________________________________________________
5 
6  (C) dGB Beheer B.V.; (LICENSE) http://opendtect.org/OpendTect_license.txt
7  Author: Bert
8  Date: Nov 2013
9 ________________________________________________________________________
10 
11 -*/
12 
13 #include "basicmod.h"
14 #include "bufstring.h"
15 #include "uistring.h"
16 #include "od_iosfwd.h"
17 
18 mFDQtclass(QProcess);
19 class qstreambuf;
20 
21 namespace OS
22 {
23 
24 
26 
27 
32 {
33 public:
34  CommandExecPars( bool isbatchprog=false )
35  : needmonitor_(false)
36  , createstreams_(false)
37  , prioritylevel_(isbatchprog ? -1.0f : 0.0f)
38  , launchtype_(isbatchprog ? RunInBG : Wait4Finish)
39  , isconsoleuiprog_(false) {}
40 
41  mDefSetupClssMemb(CommandExecPars,bool,createstreams);
42  mDefSetupClssMemb(CommandExecPars,bool,needmonitor);
43  mDefSetupClssMemb(CommandExecPars,BufferString,monitorfnm);
45 
46  mDefSetupClssMemb(CommandExecPars,LaunchType,launchtype);
47 
48  mDefSetupClssMemb(CommandExecPars,float,prioritylevel);
50 
51  mDefSetupClssMemb(CommandExecPars,bool,isconsoleuiprog);
54 
55  void usePar(const IOPar&);
56  void fillPar(IOPar&) const;
57  void removeFromPar(IOPar&) const;
58 
59  static const char* sKeyPriority() { return "priority"; }
60 
61  static const StepInterval<int> cMachineUserPriorityRange(bool iswin);
67  static int getMachinePriority(float priolevel,bool iswin);
68 };
69 
70 
78 {
79 public:
80 
81  MachineCommand(const char* comm=0);
86  MachineCommand(const char* comm,const char* hnm);
87 
88  inline const char* command() const { return comm_; }
89  inline void setCommand( const char* cm ) { comm_ = cm; }
90  inline const char* hostName() const { return hname_; }
91  inline void setHostName( const char* hnm ) { hname_ = hnm; }
92  inline const char* remExec() const { return remexec_; }
93  inline void setRemExec( const char* sh ) { remexec_ = sh; }
94 
95  inline bool isBad() const { return comm_.isEmpty(); }
96 
97  bool setFromSingleStringRep(const char*,
98  bool ignorehostname=false);
104  const char* getSingleStringRep() const;
105 
106  bool hasHostName() const { return !hname_.isEmpty(); }
107 
108  static const char* defaultRemExec() { return defremexec_; }
109  static void setDefaultRemExec( const char* s ) { defremexec_ = s; }
110 
111  static const char* extractHostName(const char*,BufferString&);
113  BufferString getLocalCommand() const;
114 
115  static const char* odRemExecCmd() { return "od_remexec"; }
116  static const char* sKeyRemoteHost() { return "machine"; }
117  static const char* sKeyRemoteCmd() { return "cmd"; }
118  static const char* sKeyMasterHost() { return "masterhost"; }
119  static const char* sKeyMasterPort() { return "masterport"; }
120  static const char* sKeyBG() { return "bg"; }
121  static const char* sKeyFG() { return "fg"; }
122  static const char* sKeyJobID() { return "jobid"; }
123 
124 protected:
125 
129 
131 
132 };
133 
134 
138 { mODTextTranslationClass(CommandLauncher);
139 public:
140  CommandLauncher(const MachineCommand&);
141  ~CommandLauncher();
142 
143  void set(const MachineCommand&);
144 
145  bool execute(const CommandExecPars& pars=CommandExecPars());
146 
147  int processID() const;
148  const char* monitorFileName() const { return monitorfnm_; }
149  uiString errorMsg() const { return errmsg_; }
150 
151  od_istream* getStdOutput() { return stdoutput_; }
152  od_istream* getStdError() { return stderror_; }
153  od_ostream* getStdInput() { return stdinput_; }
154 
155 protected:
156 
157  void reset();
158  bool doExecute(const char* comm,bool wait4finish,
159  bool inconsole = false,
160  bool createstreams=false );
161  int catchError();
162  bool startDetached(const char*,bool inconsole=false);
163 
167 
171 
172  QProcess* process_;
174 
178 
182 public: //Extra utilities, not for general use
183  static void addShellIfNeeded(BufferString& cmd);
187  static void addQuotesIfNeeded(BufferString& cmd);
190  static void manageQProcess(QProcess*);
192 };
193 
194 
196 mGlobal(Basic) bool ExecCommand(const char* cmd,LaunchType lt=Wait4Finish,
197  BufferString* stdoutput=0,
198  BufferString* stderror=0);
199 
200 
201 } // namespace OS
202 
204 mGlobal(Basic) bool ExecODProgram(const char* prognm,const char* args=0,
205  OS::LaunchType lt=OS::RunInBG);
int64_t pid_
Definition: oscommand.h:173
#define mExpClass(module)
Definition: commondefs.h:157
OD class for stream write common access to the user log file, or std::cout in batch progs...
Definition: od_ostream.h:25
static const char * defaultRemExec()
Definition: oscommand.h:108
const char * remExec() const
Definition: oscommand.h:92
BufferString remexec_
Definition: oscommand.h:128
#define mODTextTranslationClass(clss)
Definition: uistring.h:37
Specifies how to execute a command.
Definition: oscommand.h:31
#define mGlobal(module)
Definition: commondefs.h:160
uiString errorMsg() const
Definition: oscommand.h:149
uiString errmsg_
Definition: oscommand.h:169
static const char * sKeyJobID()
Definition: oscommand.h:122
Definition: oscommand.h:21
void usePar(const IOPar &iop, ODPolygon< T > &poly, const char *inpkey)
Definition: polygon.h:200
#define od_int64
Definition: plftypes.h:34
#define mDefSetupClssMemb(clss, typ, memb)
Definition: commondefs.h:125
const char * command() const
Definition: oscommand.h:88
Encapsulates an actual command to execute + the machine to run it on.
Definition: oscommand.h:77
Launches machine commands.
Definition: oscommand.h:137
MachineCommand machcmd_
Definition: oscommand.h:164
od_istream * stderror_
Definition: oscommand.h:176
Definition: uistring.h:88
static const char * sKeyRemoteCmd()
Definition: oscommand.h:117
qstreambuf * stdinputbuf_
Definition: oscommand.h:181
static void setDefaultRemExec(const char *s)
Definition: oscommand.h:109
CommandExecPars(bool isbatchprog=false)
Definition: oscommand.h:34
Adapter to use a qprocess as a stream.
Definition: qstreambuf.h:36
OD class for stream read.
Definition: od_istream.h:23
static const char * sKeyMasterPort()
Definition: oscommand.h:119
void setRemExec(const char *sh)
Definition: oscommand.h:93
bool isBad() const
Definition: oscommand.h:95
QProcess * process_
Definition: oscommand.h:172
static BufferString defremexec_
Definition: oscommand.h:130
bool hasHostName() const
Definition: oscommand.h:106
od_ostream * stdinput_
Definition: oscommand.h:177
bool redirectoutput_
Definition: oscommand.h:166
Generalized set of parameters of the keyword-value type.
Definition: iopar.h:53
BufferString hname_
Definition: oscommand.h:127
static const char * sKeyRemoteHost()
Definition: oscommand.h:116
Definition: oscommand.h:25
LaunchType
Definition: oscommand.h:25
void setHostName(const char *hnm)
Definition: oscommand.h:91
void setCommand(const char *cm)
Definition: oscommand.h:89
#define mFDQtclass(cls)
Definition: commondefs.h:231
void fillPar(IOPar &iop, const ODPolygon< T > &poly, const char *inpkey)
Definition: polygon.h:187
const char * monitorFileName() const
Definition: oscommand.h:148
Definition: oscommand.h:25
const BufferString odprogressviewer_
Definition: oscommand.h:170
OD::String with its own variable length buffer. The buffer has a guaranteed minimum size...
Definition: bufstring.h:38
BufferString progvwrcmd_
Definition: oscommand.h:168
static const char * odRemExecCmd()
Definition: oscommand.h:115
BufferString errmsg_
Definition: horizontracker.h:117
static const char * sKeyPriority()
Definition: oscommand.h:59
static const char * sKeyMasterHost()
Definition: oscommand.h:118
const char * hostName() const
Definition: oscommand.h:90
qstreambuf * stderrorbuf_
Definition: oscommand.h:180
od_ostream * getStdInput()
Definition: oscommand.h:153
bool ExecCommand(const char *cmd, LaunchType lt=Wait4Finish, BufferString *stdoutput=0, BufferString *stderror=0)
od_istream * getStdOutput()
Definition: oscommand.h:151
static const char * sKeyBG()
Definition: oscommand.h:120
BufferString comm_
Definition: oscommand.h:126
od_istream * getStdError()
Definition: oscommand.h:152
BufferString monitorfnm_
Definition: oscommand.h:165
bool ExecODProgram(const char *prognm, const char *args=0, OS::LaunchType lt=OS::RunInBG)
od_istream * stdoutput_
Definition: oscommand.h:175
static const char * sKeyFG()
Definition: oscommand.h:121
qstreambuf * stdoutputbuf_
Definition: oscommand.h:179

Generated at for the OpendTect seismic interpretation project. Copyright (C): dGB Beheer B. V. 2017