Avogadro::QtGui::PythonScript#

class PythonScript : public QObject#

The PythonScript class implements a interface for calling short-lived python utility scripts.

Unnamed Group

explicit PythonScript(const QString &scriptFilePath_, QObject *parent_ = nullptr)#

Constructors

Parameters:

scriptFilePath_ – Absolute path to python script.

explicit PythonScript(QObject *parent_ = nullptr)#

Constructors

Parameters:

scriptFilePath_ – Absolute path to python script.

Public Functions

~PythonScript() override#
inline bool debug() const#
Returns:

True if debugging of python I/O is enabled.

inline QString scriptFilePath() const#
Returns:

The path to the generator file.

void setScriptFilePath(const QString &scriptFile)#

Set the path to the input generator script file. This will reset any cached data held by this class.

void setPackageInfo(const QString &packageDir, const QString &command, const QString &identifier)#

Enable package mode. In this mode, execute() runs “pixi run <command> <identifier> [args]” with packageDir as the working directory, instead of launching a script file via python.

inline bool isPackageMode() const#
Returns:

True if this script is in package mode.

inline QString packageDir() const#
Returns:

The package directory (only meaningful in package mode).

inline QString packageCommand() const#
Returns:

The package command (only meaningful in package mode).

inline QString packageIdentifier() const#
Returns:

The package identifier (only meaningful in package mode).

inline bool hasErrors() const#
Returns:

True if an error is set.

inline void clearErrors()#

Reset the error counter.

inline QStringList errorList() const#
Returns:

A QStringList containing all errors that occurred in the last call to the input generator script.

void setDefaultPythonInterpreter()#

Reset the python interpretor path. The following are checked, in order:

  • The AVO_PYTHON_INTERPRETER environment variable

  • The “interpreters/python” QSettings value

  • The path specified in avogadropython.h.

QByteArray execute(const QStringList &args, const QByteArray &scriptStdin = QByteArray())#

Start a new process to execute: “<m_pythonInterpreter> <scriptFilePath()> [args …]”, optionally passing scriptStdin to the processes standard input. Returns the standard output of the process when finished.

void asyncExecute(const QStringList &args, const QByteArray &scriptStdin = QByteArray(), bool mergedChannels = true, bool closeWriteChannel = true)#

Start a new process to execute asynchronously “<m_pythonInterpreter> <scriptFilePath()> [args …]”, optionally passing scriptStdin to the processes standard input. If closeWriteChannel is false, stdin remains open for follow-up writes.

Will send asyncFinished() signal when finished

QByteArray asyncWriteAndResponse(QByteArray input)#

Write input to the asynchronous process’ standard input and return the standard output when ready. Does not wait for the process to terminate before returning (e.g. “server mode”).

Parameters:

input – The input to write to the process’ standard input

Returns:

The standard output of the process

QByteArray asyncWriteAndResponseRaw(const QByteArray &input, int timeoutMs = 5000)#

Write input to the asynchronous process’ standard input and return raw bytes from stdout. Unlike asyncWriteAndResponse(), this does not require line-oriented output and is suitable for framed binary protocols.

void asyncTerminate()#

Terminate the asynchronous process.

QByteArray asyncResponse()#

Returns the standard output of the asynchronous process when finished.

Public Slots

inline void setDebug(bool d)#

Enable/disable debugging.

void processFinished(int exitCode, QProcess::ExitStatus exitStatus)#

Handle a finished process;

Signals

void finished()#

The asynchronous execution is finished or timed out

Protected Attributes

bool m_debug#
bool m_packageMode = false#
QString m_pythonInterpreter#
QString m_pixi#
QString m_scriptFilePath#
QString m_packageDir#
QString m_packageCommand#
QString m_packageIdentifier#
QStringList m_errors#
QProcess *m_process#