mirror of
https://github.com/lune-org/docs.git
synced 2024-12-12 21:10:36 +00:00
49 lines
1.8 KiB
Markdown
49 lines
1.8 KiB
Markdown
|
# Spawning Processes
|
||
|
|
||
|
Whenever Lune does not have the API you need as part of its built-in libraries, or when you want to
|
||
|
use a program that already exists but interact with it from within Lune, you can use
|
||
|
[`process.spawn`](../../api-reference/process.md#spawn).
|
||
|
|
||
|
## Example
|
||
|
|
||
|
This example calls out to the native "ping" program found in many operating systems, and parses its
|
||
|
output into something more usable to us.
|
||
|
|
||
|
This may look scary with lots of weird symbols, but, it's just some Lua-style pattern matching to
|
||
|
parse the lines of "min/avg/max/stddev = W/X/Y/Z ms" that the ping program gives back to us.
|
||
|
|
||
|
```lua copy
|
||
|
print("Sending 4 pings to google 🌏")
|
||
|
|
||
|
local result = process.spawn("ping", {
|
||
|
"google.com",
|
||
|
"-c 4",
|
||
|
})
|
||
|
|
||
|
if result.ok then
|
||
|
assert(#result.stdout > 0, "Result output was empty")
|
||
|
local min, avg, max, stddev = string.match(
|
||
|
result.stdout,
|
||
|
"min/avg/max/stddev = ([%d%.]+)/([%d%.]+)/([%d%.]+)/([%d%.]+) ms"
|
||
|
)
|
||
|
print(string.format("Minimum ping time: %.3fms", tonumber(min)))
|
||
|
print(string.format("Maximum ping time: %.3fms", tonumber(max)))
|
||
|
print(string.format("Average ping time: %.3fms", tonumber(avg)))
|
||
|
print(string.format("Standard deviation: %.3fms", tonumber(stddev)))
|
||
|
else
|
||
|
print("Failed to send ping to google!")
|
||
|
print(result.stderr)
|
||
|
process.exit(result.code)
|
||
|
end
|
||
|
```
|
||
|
|
||
|
Note that if the result of the subprocess was non-zero, meaning it errored and `ok` was set to
|
||
|
`false`, we will also propagate the exit code of that subprocess using
|
||
|
[`process.exit`](../../api-reference/process.md#exit). This will ensure that if our subprocess
|
||
|
fails, our script will do the same, and let the user know with a proper exit code.
|
||
|
|
||
|
## Conclusion
|
||
|
|
||
|
This is the last page of the introduction book, for more specific usage and a full overview of all
|
||
|
of the APIs that Lune provides, please check out the API Reference section in the sidebar. Enjoy! 🚀
|