1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136
|
/*
* Copyright (C) 2008 Rolf Eike Beer <kde@opensource.sf-tec.de>
*/
/***************************************************************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
***************************************************************************/
#ifndef KLINEBUFFEREDPROCESS_H
#define KLINEBUFFEREDPROCESS_H
#include <KProcess>
#include "klinebufferedprocessprivate.h"
class QByteArray;
/**
* Read output of a process split into lines
*
* This class reads the output of a process and splits it up into lines. This
* is especially useful if you try to parse the output of a command line tool.
*
* \b Usage \n
*
* The class is created and set up like a KProcess. After this you can do
* something like this:
*
* \code
* connect(m_linebufprocess, &KLineBufferedProcess::lineReadyStandardOutput, this, &Class::dataStdout);
* ...
* void myobj::dataStdout()
* {
* while (m_linebufprocess->hasLineStandardOutput()) {
* QByteArray line;
* m_linebufprocess->readLineStandardOutput(line);
* ...
* }
* }
* \endcode
*
* Never use the read functionality of KProcess with this class. This class
* needs to read all data from the process into an internal buffer first. If
* you try to use the read functions of the parent classes you would normally
* get no output at all.
*
* The write functions of the parent classes are not effected. You can use
* them exactly the same way as in KProcess.
*
* @author Rolf Eike Beer
*/
class KLineBufferedProcess : public KProcess
{
Q_OBJECT
friend class KLineBufferedProcessPrivate;
public:
/**
* Constructor
*/
explicit KLineBufferedProcess(QObject *parent = nullptr);
/**
* Destructor
*/
~KLineBufferedProcess();
/**
* Reads a line of text (excluding '\\n') from stdout.
*
* Use readLineStdout() in response to a lineReadyStdout() signal or
* when hasLineStdout() returns true. You may use it multiple times if
* more than one line of data is available. If no complete line is
* available the content of line is undefined and the function returns
* false.
*
* @param line is used to store the line that was read.
* @return if data was read or not
*/
bool readLineStandardOutput(QByteArray *line);
/**
* Reads a line of text (excluding '\\n') from stderr.
*
* Use readLineStderr() in response to a lineReadyStderr() signal or
* when hasLineStderr() returns true. You may use it multiple times if
* more than one line of data is available. If no complete line is
* available the content of line is undefined and the function returns
* false.
*
* @param line is used to store the line that was read.
* @return if data was read or not
*/
bool readLineStandardError(QByteArray *line);
/**
* Checks if a line is ready on stdout
*
* @return true if a complete line can be read
*/
bool hasLineStandardOutput() const;
/**
* Checks if a line is ready on stdout
*
* @return true if a complete line can be read
*/
bool hasLineStandardError() const;
signals:
/**
* Emitted when there is a line of data available from stdout when there was
* previously none.
* There may or may not be more than one line available for reading when this
* signal is emitted.
*/
void lineReadyStandardOutput();
/**
* Emitted when there is a line of data available from stderr when there was
* previously none.
* There may or may not be more than one line available for reading when this
* signal is emitted.
*/
void lineReadyStandardError();
private:
KLineBufferedProcessPrivate* const d;
};
#endif // KLINEBUFFEREDPROCESS_H
|