Difference between revisions of "Process Module"
Jump to navigation
Jump to search
| Line 28: | Line 28: | ||
* {{Code|proc:system('date')}} returns the current date on a Linux system. | * {{Code|proc:system('date')}} returns the current date on a Linux system. | ||
* Analyses the given input and counts the number of lines, words and characters (provided that {{Code|wc}} is available on the system): | * Analyses the given input and counts the number of lines, words and characters (provided that {{Code|wc}} is available on the system): | ||
| − | < | + | <syntaxhighlight lang="xquery"> |
proc:system( | proc:system( | ||
'wc', (), | 'wc', (), | ||
map { 'input': 'A B' || out:nl() || 'C' } | map { 'input': 'A B' || out:nl() || 'C' } | ||
) | ) | ||
| − | </ | + | </syntaxhighlight> |
* The following example returns “Command not found” (unless {{Code|xyz}} is a valid command on the system): | * The following example returns “Command not found” (unless {{Code|xyz}} is a valid command on the system): | ||
| − | < | + | <syntaxhighlight lang="xquery"> |
try { | try { | ||
proc:system('xyz') | proc:system('xyz') | ||
| Line 41: | Line 41: | ||
'Command not found: ' || $err:description | 'Command not found: ' || $err:description | ||
} | } | ||
| − | </ | + | </syntaxhighlight> |
|} | |} | ||
| Line 58: | Line 58: | ||
* Instead of the {{Code|proc:code....}} error, the error message will be assigned to the returned element (no process code will be returned). | * Instead of the {{Code|proc:code....}} error, the error message will be assigned to the returned element (no process code will be returned). | ||
The result has the following structure: | The result has the following structure: | ||
| − | < | + | <syntaxhighlight lang="xml"> |
<result> | <result> | ||
<output>...output...</output> | <output>...output...</output> | ||
| Line 64: | Line 64: | ||
<code>...process code...</code> | <code>...process code...</code> | ||
</result> | </result> | ||
| − | </ | + | </syntaxhighlight> |
|- | |- | ||
|'''Errors''' | |'''Errors''' | ||
Revision as of 16:19, 27 February 2020
This XQuery Module provides functions for executing system commands from XQuery.
Contents
Conventions
All functions and errors in this module are assigned to the http://basex.org/modules/proc namespace, which is statically bound to the proc prefix.
Functions
proc:system
| Signatures | proc:system($cmd as xs:string) as xs:stringproc:system($cmd as xs:string, $args as xs:string*) as xs:stringproc:system($cmd as xs:string, $args as xs:string*, $options as map(xs:string, xs:string)) as xs:string |
| Summary | Executes the specified command in a separate process and returns the result as string. $cmd is the name of the command, arguments to the command may be specified via $args. The $options parameter contains process options:
|
| Errors | encoding: the specified encoding does not exist or is not supported.timeout: the specified timeout was exceeded.error: the command could not be executed, or an I/O exception was raised.code....: If the commands returns an exit code different to 0, an error will be raised. Its code will consist of the letters code and four digits with the exit code. |
| Examples |
<syntaxhighlight lang="xquery"> proc:system( 'wc', (),
map { 'input': 'A B' || out:nl() || 'C' }
) </syntaxhighlight>
<syntaxhighlight lang="xquery"> try { proc:system('xyz')
} catch proc:error { 'Command not found: ' || $err:description } </syntaxhighlight> |
proc:execute
| Signatures | proc:execute($cmd as xs:string) as element(result)proc:execute($cmd as xs:string, $args as xs:string*) as element(result)proc:execute($cmd as xs:string, $args as xs:string*, $options as map(xs:string, xs:string)) as element(result)
|
| Summary | Executes the specified command in a separate process and returns the result as element:
The result has the following structure: <syntaxhighlight lang="xml"> <result> <output>...output...</output>
<error>...error message...</error>
</result> </syntaxhighlight> |
| Errors | encoding: the specified encoding does not exist or is not supported.timeout: the specified timeout was exceeded.
|
| Examples |
|
proc:fork
| Signatures | proc:fork($cmd as xs:string) as element(result)proc:fork($cmd as xs:string, $args as xs:string*) as element(result)proc:fork($cmd as xs:string, $args as xs:string*, $options as map(xs:string, xs:string)) as element(result)
|
| Summary | Executes the specified command and ignores the result. $cmd is the name of the command, and arguments to the command may be specified via $args. The same $options are allowed as for proc:system (but the encoding will be ignored).
|
| Errors | encoding: the specified encoding does not exist or is not supported.
|
| Examples |
|
proc:property
| Signatures | proc:property($name as xs:string) as xs:string? |
| Summary | Returns the system property, specified by $name, or a context parameter of the web.xml file with that name (see Web Applications). An empty sequence is returned if the property does not exist. For environment variables of the operating system, please use fn:environment-variable.
|
| Examples |
|
proc:property-names
| Signatures | proc:property-names() as xs:string* |
| Summary | Returns the names of all Java system properties and context parameters of the web.xml file (see Web Applications). For environment variables of the operating system, please use fn:available-environment-variables.
|
| Examples |
|
Errors
| Code | Description |
|---|---|
code...
|
The result of a command call with an exit code different to 0. |
code9999
|
A command could not be executed. |
encoding
|
The specified encoding does not exist or is not supported. |
timeout
|
The specified timeout was exceeded. |
Changelog
- Version 9.0
- Added: proc:fork
- Updated: error codes; errors now use the module namespace
- Updated: new
inputoption; revised error handling
- Version 8.6
- Updated: proc:system, proc:exec:
encodingoption moved to options argument,timeoutanddiroptions added.
- Version 8.3
- Added: proc:property, proc:property-names.
The module was introduced with Version 7.3.