Skip to content
Draft

process

The process module provides access to the current process and environment.

import process
import { args, env, exit } from process

Get all arguments:

@args = @process#args()
@// ["program.draft", "arg1", "arg2"]

Get argument by index:

@first = @process#arg(0)

Get argument count:

@count = @process#argc()

Check if argument exists:

@verbose = @process#has_arg("--verbose")

Get argument value:

@name = @process#get_arg("--name")

Get environment variable:

@home = @process#env("HOME")
@path = @process#env("PATH")

Get environment variable with default:

@port = @process#env_or("PORT", "8080")

Get all environment variables:

@vars = @process#env_all()
for @key, @value in @vars
write(@key + "=" + @value)
fin for.

Set environment variable:

@process#set_env("DEBUG", "true")

Remove environment variable:

@process#remove_env("TEMP_VAR")

Get process ID:

@pid = @process#pid()

Get parent process ID:

@ppid = @process#parent_pid()

Get current working directory:

@dir = @process#cwd()

Set current working directory:

@process#set_cwd("/tmp")

Get temporary directory:

@tmp = @process#temp_dir()

Get user home directory:

@home = @process#home_dir()

Get system hostname:

@host = @process#hostname()

Get operating system:

@os = @process#os() @// "linux", "macos", "windows"

Get architecture:

@arch = @process#arch() @// "x86_64", "aarch64"

Get Draft version:

@version = @process#version()

Get process uptime:

@uptime = @process#uptime()

Exit with status code:

@process#exit(0) @// Success
@process#exit(1) @// Error

Abort immediately:

@process#abort()

Panic with message:

@process#panic("Something went wrong")

Spawn a new process:

@child = @process#spawn("ls", ["-la"])
@result = @child#wait()

Execute a process (replaces current):

@process#exec("ls", ["-la"])
@import process#Command
@cmd = @process#Command::new("git")
#arg("commit")
#arg("-m")
#arg("Initial commit")
#env("GIT_AUTHOR_NAME", "Alice")
#cwd("/repo")
@result = @cmd#run()
@output = @result#stdout
@status = @result#status
@import process#Command
@result = @process#Command::new("ls")
#pipe(@process#Command::new("grep"), ".draft")
#run()
@import process#Command
@process = @process#Command::new("long-running-task")
#spawn()
@// Do other work...
@process#wait()

Access stdin:

@stdin = @process#stdin()
@line = @stdin#read_line()

Access stdout:

@stdout = @process#stdout()
@stdout#write("Hello")
@stdout#flush()

Access stderr:

@stderr = @process#stderr()
@stderr#write("Error!")
@import process#Command
@result = @process#Command::new("ls")
#stdout_to_file("output.txt")
#run()

Handle signals:

@process#on_signal("SIGTERM", fn() =>
@io#write_line("Received SIGTERM")
@server#shutdown()
@process#exit(0)
fin action.)
@process#on_signal("SIGINT", fn() =>
@io#write_line("Interrupted")
@process#exit(0)
fin action.)

Send signal to process:

@process#send_signal(@pid, "SIGTERM")

Read file as string:

@content = @process#read_file("file.txt")

Write string to file:

@process#process#write_file("file.txt", "content")

Create a pipe:

@pipe = @process#pipe()
@pipe#write("data")
@data = @pipe#read()

Get memory usage:

@bytes = @process#memory_usage()

Get CPU time:

@time = @process#cpu_time()

Open URL in browser:

@process#open_url("https://draft-lang.dev")

Open file with default program:

@process#open_file("document.pdf")

System beep:

@process#beep()

Clear terminal:

@process#clear_screen()