Files
mgmt/examples/lang/system_func.mcl
Samuel Gélineau c23065aacd lang: funcs: Add SystemFunc
Runs a string as a shell command, then produces each line from stdout.
2022-09-11 21:58:39 -04:00

71 lines
1.6 KiB
Plaintext

import "datetime"
import "fmt"
import "os"
# Re-runs the command every second, but the output of the calculation
# ($now / 10) % 10 is the same for 10 seconds in a row.
#
# The value of $n over time looks like this:
#
# [...]
# 8
# [10 seconds pause]
# 9
# [10 seconds pause]
# 0
# [10 seconds pause]
# 1
# [10 seconds pause]
# 2
# [...]
$n = os.system(fmt.printf("echo \"(%d / 10) %% 10\" | bc", datetime.now()))
# Re-runs the command every 10 seconds, when $n changes. Produces a str for
# every line that the command outputs, which happens to be every $n seconds.
#
# The value of $i over time looks like this:
#
# [...]
# 108
# [8 seconds pause]
# 208
# [10 - 8 = 2 seconds pause, aborts and restarts]
# 109
# [9 seconds pause]
# 209
# [10 - 9 = 1 second pause, aborts and restarts]
# 100
# 200
# 300
# done
# double done
# [10 - 0 - 0 - 0 = 10 seconds pause, restarts]
# 101
# [1 second pause]
# 201
# [1 second pause]
# 301
# [1 second pause]
# done
# double done
# [10 - 1 - 1 - 1 = 7 seconds pause, restarts]
# 102
# [2 seconds pause]
# 202
# [2 seconds pause]
# 302
# [2 seconds pause]
# done
# double done
# [10 - 2 - 2 - 2 = 4 seconds pause, restarts]
# [...]
$i = os.system(fmt.printf("for x in `seq 3`; do echo \"100 * $x + %s\" | bc; sleep %s; done; echo done; echo double done", $n, $n))
# The anotherstr field is updated every time $i changes, however when such a
# field changes several times in quick succession, the resource is only
# guaranteed to be ran for the last value. Thus, it is likely that the "done"
# values will not be printed.
test "out" {
anotherstr => $i,
}