def RunCommand(prog, flags="", overwrite=False, quiet=False, verbose=False, parent=None, read=False, parse=None, stdin=None, getErrorMsg=False, **kwargs): """Run GRASS command :param prog: program to run :param flags: flags given as a string :param overwrite, quiet, verbose: flags :param parent: parent window for error messages :param read: fetch stdout :param parse: fn to parse stdout (e.g. grass.parse_key_val) or None :param stdin: stdin or None :param getErrorMsg: get error messages on failure :param kwargs: program parameters :return: returncode (read == False and getErrorMsg == False) :return: returncode, messages (read == False and getErrorMsg == True) :return: stdout (read == True and getErrorMsg == False) :return: returncode, stdout, messages (read == True and getErrorMsg == True) :return: stdout, stderr """ cmdString = ' '.join( grass.make_command(prog, flags, overwrite, quiet, verbose, **kwargs)) Debug.msg(1, "gcmd.RunCommand(): %s" % cmdString) kwargs['stderr'] = subprocess.PIPE if read: kwargs['stdout'] = subprocess.PIPE if stdin: kwargs['stdin'] = subprocess.PIPE if parent: messageFormat = os.getenv('GRASS_MESSAGE_FORMAT', 'gui') os.environ['GRASS_MESSAGE_FORMAT'] = 'standard' Debug.msg(2, "gcmd.RunCommand(): command started") start = time.time() ps = grass.start_command(prog, flags, overwrite, quiet, verbose, **kwargs) if stdin: ps.stdin.write(stdin) ps.stdin.close() ps.stdin = None Debug.msg(3, "gcmd.RunCommand(): decoding string") stdout, stderr = map(DecodeString, ps.communicate()) if parent: # restore previous settings os.environ['GRASS_MESSAGE_FORMAT'] = messageFormat ret = ps.returncode Debug.msg(1, "gcmd.RunCommand(): get return code %d (%.6f sec)" % \ (ret, (time.time() - start))) Debug.msg(3, "gcmd.RunCommand(): print error") if ret != 0: if stderr: Debug.msg(2, "gcmd.RunCommand(): error %s" % stderr) else: Debug.msg(2, "gcmd.RunCommand(): nothing to print ???") if parent: GError(parent=parent, caption=_("Error in %s") % prog, message=stderr) Debug.msg(3, "gcmd.RunCommand(): print read error") if not read: if not getErrorMsg: return ret else: return ret, _formatMsg(stderr) if stdout: Debug.msg(2, "gcmd.RunCommand(): return stdout\n'%s'" % stdout) else: Debug.msg(2, "gcmd.RunCommand(): return stdout = None") if parse: stdout = parse(stdout) if not getErrorMsg: return stdout Debug.msg(2, "gcmd.RunCommand(): return ret, stdout") if read and getErrorMsg: return ret, stdout, _formatMsg(stderr) Debug.msg(2, "gcmd.RunCommand(): return result") return stdout, _formatMsg(stderr)
def RunCommand( prog, flags="", overwrite=False, quiet=False, verbose=False, parent=None, read=False, parse=None, stdin=None, getErrorMsg=False, env=None, **kwargs, ): """Run GRASS command :param prog: program to run :param flags: flags given as a string :param overwrite, quiet, verbose: flags :param parent: parent window for error messages :param read: fetch stdout :param parse: fn to parse stdout (e.g. grass.parse_key_val) or None :param stdin: stdin or None :param getErrorMsg: get error messages on failure :param env: environment (optional, uses os.environ if not provided) :param kwargs: program parameters The environment passed to the function (env or os.environ) is not modified (a copy is used internally). :return: returncode (read == False and getErrorMsg == False) :return: returncode, messages (read == False and getErrorMsg == True) :return: stdout (read == True and getErrorMsg == False) :return: returncode, stdout, messages (read == True and getErrorMsg == True) :return: stdout, stderr """ cmdString = " ".join( grass.make_command(prog, flags, overwrite, quiet, verbose, **kwargs) ) Debug.msg(1, "gcmd.RunCommand(): %s" % cmdString) kwargs["stderr"] = subprocess.PIPE if read: kwargs["stdout"] = subprocess.PIPE if stdin: kwargs["stdin"] = subprocess.PIPE # Do not change the environment, only a local copy. if env: env = env.copy() else: env = os.environ.copy() if parent: env["GRASS_MESSAGE_FORMAT"] = "standard" start = time.time() ps = grass.start_command(prog, flags, overwrite, quiet, verbose, env=env, **kwargs) if stdin: ps.stdin.write(encode(stdin)) ps.stdin.close() ps.stdin = None stdout, stderr = ps.communicate() stderr = decode(stderr) stdout = decode(stdout) if read else stdout ret = ps.returncode Debug.msg( 1, "gcmd.RunCommand(): get return code %d (%.6f sec)" % (ret, (time.time() - start)), ) if ret != 0: if stderr: Debug.msg(2, "gcmd.RunCommand(): error %s" % stderr) else: Debug.msg(2, "gcmd.RunCommand(): nothing to print ???") if parent: GError(parent=parent, caption=_("Error in %s") % prog, message=stderr) if not read: if not getErrorMsg: return ret else: return ret, _formatMsg(stderr) if stdout: Debug.msg(3, "gcmd.RunCommand(): return stdout\n'%s'" % stdout) else: Debug.msg(3, "gcmd.RunCommand(): return stdout = None") if parse: stdout = parse(stdout) if not getErrorMsg: return stdout if read and getErrorMsg: return ret, stdout, _formatMsg(stderr) return stdout, _formatMsg(stderr)
def RunCommand(prog, flags = "", overwrite = False, quiet = False, verbose = False, parent = None, read = False, parse = None, stdin = None, getErrorMsg = False, **kwargs): """!Run GRASS command @param prog program to run @param flags flags given as a string @param overwrite, quiet, verbose flags @param parent parent window for error messages @param read fetch stdout @param parse fn to parse stdout (e.g. grass.parse_key_val) or None @param stdin stdin or None @param getErrorMsg get error messages on failure @param kwargs program parameters @return returncode (read == False and getErrorMsg == False) @return returncode, messages (read == False and getErrorMsg == True) @return stdout (read == True and getErrorMsg == False) @return returncode, stdout, messages (read == True and getErrorMsg == True) @return stdout, stderr """ cmdString = ' '.join(grass.make_command(prog, flags, overwrite, quiet, verbose, **kwargs)) Debug.msg(1, "gcmd.RunCommand(): %s" % cmdString) kwargs['stderr'] = subprocess.PIPE if read: kwargs['stdout'] = subprocess.PIPE if stdin: kwargs['stdin'] = subprocess.PIPE ps = grass.start_command(prog, flags, overwrite, quiet, verbose, **kwargs) Debug.msg(2, "gcmd.RunCommand(): command started") if stdin: ps.stdin.write(stdin) ps.stdin.close() ps.stdin = None Debug.msg(3, "gcmd.RunCommand(): decoding string") stdout, stderr = map(utils.DecodeString, ps.communicate()) ret = ps.returncode Debug.msg(1, "gcmd.RunCommand(): get return code %d" % ret) Debug.msg(3, "gcmd.RunCommand(): print error") if ret != 0 and parent: Debug.msg(2, "gcmd.RunCommand(): error %s" % stderr) if (stderr == None): Debug.msg(2, "gcmd.RunCommand(): nothing to print ???") else: GError(parent = parent, message = stderr) Debug.msg(3, "gcmd.RunCommand(): print read error") if not read: if not getErrorMsg: return ret else: return ret, _formatMsg(stderr) if stdout: Debug.msg(2, "gcmd.RunCommand(): return stdout\n'%s'" % stdout) else: Debug.msg(2, "gcmd.RunCommand(): return stdout = None") if parse: stdout = parse(stdout) if not getErrorMsg: return stdout Debug.msg(2, "gcmd.RunCommand(): return ret, stdout") if read and getErrorMsg: return ret, stdout, _formatMsg(stderr) Debug.msg(2, "gcmd.RunCommand(): return result") return stdout, _formatMsg(stderr)
def RunCommand(prog, flags = "", overwrite = False, quiet = False, verbose = False, parent = None, read = False, parse = None, stdin = None, getErrorMsg = False, **kwargs): """Run GRASS command :param prog: program to run :param flags: flags given as a string :param overwrite, quiet, verbose: flags :param parent: parent window for error messages :param read: fetch stdout :param parse: fn to parse stdout (e.g. grass.parse_key_val) or None :param stdin: stdin or None :param getErrorMsg: get error messages on failure :param kwargs: program parameters :return: returncode (read == False and getErrorMsg == False) :return: returncode, messages (read == False and getErrorMsg == True) :return: stdout (read == True and getErrorMsg == False) :return: returncode, stdout, messages (read == True and getErrorMsg == True) :return: stdout, stderr """ cmdString = ' '.join(grass.make_command(prog, flags, overwrite, quiet, verbose, **kwargs)) Debug.msg(1, "gcmd.RunCommand(): %s" % cmdString) kwargs['stderr'] = subprocess.PIPE if read: kwargs['stdout'] = subprocess.PIPE if stdin: kwargs['stdin'] = subprocess.PIPE if parent: messageFormat = os.getenv('GRASS_MESSAGE_FORMAT', 'gui') os.environ['GRASS_MESSAGE_FORMAT'] = 'standard' start = time.time() ps = grass.start_command(prog, flags, overwrite, quiet, verbose, **kwargs) if stdin: ps.stdin.write(stdin) ps.stdin.close() ps.stdin = None stdout, stderr = map(DecodeString, ps.communicate()) if parent: # restore previous settings os.environ['GRASS_MESSAGE_FORMAT'] = messageFormat ret = ps.returncode Debug.msg(1, "gcmd.RunCommand(): get return code %d (%.6f sec)" % \ (ret, (time.time() - start))) if ret != 0: if stderr: Debug.msg(2, "gcmd.RunCommand(): error %s" % stderr) else: Debug.msg(2, "gcmd.RunCommand(): nothing to print ???") if parent: GError(parent = parent, caption = _("Error in %s") % prog, message = stderr) if not read: if not getErrorMsg: return ret else: return ret, _formatMsg(stderr) if stdout: Debug.msg(3, "gcmd.RunCommand(): return stdout\n'%s'" % stdout) else: Debug.msg(3, "gcmd.RunCommand(): return stdout = None") if parse: stdout = parse(stdout) if not getErrorMsg: return stdout if read and getErrorMsg: return ret, stdout, _formatMsg(stderr) return stdout, _formatMsg(stderr)
def RunCommand(prog, flags="", overwrite=False, quiet=False, verbose=False, parent=None, read=False, stdin=None, getErrorMsg=False, **kwargs): """!Run GRASS command @param prog program to run @param flags flags given as a string @param overwrite, quiet, verbose flags @param parent parent window for error messages @param read fetch stdout @param stdin stdin or None @param getErrorMsg get error messages on failure @param kwargs program parameters @return returncode (read == False and getErrorMsg == False) @return returncode, messages (read == False and getErrorMsg == True) @return stdout (read == True and getErrorMsg == False) @return returncode, stdout, messages (read == True and getErrorMsg == True) @return stdout, stderr """ cmdString = ' '.join( grass.make_command(prog, flags, overwrite, quiet, verbose, **kwargs)) Debug.msg(1, "gcmd.RunCommand(): %s" % cmdString) kwargs['stderr'] = subprocess.PIPE if read: kwargs['stdout'] = subprocess.PIPE if stdin: kwargs['stdin'] = subprocess.PIPE ps = grass.start_command(GetRealCmd(prog), flags, overwrite, quiet, verbose, **kwargs) Debug.msg(2, "gcmd.RunCommand(): command started") if stdin: ps.stdin.write(stdin) ps.stdin.close() ps.stdin = None Debug.msg(3, "gcmd.RunCommand(): decoding string") stdout, stderr = map(DecodeString, ps.communicate()) ret = ps.returncode Debug.msg(1, "gcmd.RunCommand(): get return code %d" % ret) Debug.msg(3, "gcmd.RunCommand(): print error") if ret != 0 and parent: Debug.msg(2, "gcmd.RunCommand(): error %s" % stderr) if (stderr == None): Debug.msg(2, "gcmd.RunCommand(): nothing to print ???") else: GError(parent=parent, message=stderr) Debug.msg(3, "gcmd.RunCommand(): print read error") if not read: if not getErrorMsg: return ret else: return ret, _formatMsg(stderr) if stdout: Debug.msg(2, "gcmd.RunCommand(): return stdout\n'%s'" % stdout) else: Debug.msg(2, "gcmd.RunCommand(): return stdout = None") if not getErrorMsg: return stdout Debug.msg(2, "gcmd.RunCommand(): return ret, stdout") if read and getErrorMsg: return ret, stdout, _formatMsg(stderr) Debug.msg(2, "gcmd.RunCommand(): return result") return stdout, _formatMsg(stderr)