summaryrefslogtreecommitdiff
path: root/docs/examples/subprocess.md
diff options
context:
space:
mode:
Diffstat (limited to 'docs/examples/subprocess.md')
-rw-r--r--docs/examples/subprocess.md74
1 files changed, 74 insertions, 0 deletions
diff --git a/docs/examples/subprocess.md b/docs/examples/subprocess.md
new file mode 100644
index 000000000..80d0cc7da
--- /dev/null
+++ b/docs/examples/subprocess.md
@@ -0,0 +1,74 @@
+## Run subprocess
+
+[API Reference](https://doc.deno.land/https/github.com/denoland/deno/releases/latest/download/lib.deno.d.ts#Deno.run)
+
+Example:
+
+```ts
+// create subprocess
+const p = Deno.run({
+ cmd: ["echo", "hello"],
+});
+
+// await its completion
+await p.status();
+```
+
+Run it:
+
+```shell
+$ deno run --allow-run ./subprocess_simple.ts
+hello
+```
+
+Here a function is assigned to `window.onload`. This function is called after
+the main script is loaded. This is the same as
+[onload](https://developer.mozilla.org/en-US/docs/Web/API/GlobalEventHandlers/onload)
+of the browsers, and it can be used as the main entrypoint.
+
+By default when you use `Deno.run()` subprocess inherits `stdin`, `stdout` and
+`stderr` of parent process. If you want to communicate with started subprocess
+you can use `"piped"` option.
+
+```ts
+const fileNames = Deno.args;
+
+const p = Deno.run({
+ cmd: [
+ "deno",
+ "run",
+ "--allow-read",
+ "https://deno.land/std/examples/cat.ts",
+ ...fileNames,
+ ],
+ stdout: "piped",
+ stderr: "piped",
+});
+
+const { code } = await p.status();
+
+if (code === 0) {
+ const rawOutput = await p.output();
+ await Deno.stdout.write(rawOutput);
+} else {
+ const rawError = await p.stderrOutput();
+ const errorString = new TextDecoder().decode(rawError);
+ console.log(errorString);
+}
+
+Deno.exit(code);
+```
+
+When you run it:
+
+```shell
+$ deno run --allow-run ./subprocess.ts <somefile>
+[file content]
+
+$ deno run --allow-run ./subprocess.ts non_existent_file.md
+
+Uncaught NotFound: No such file or directory (os error 2)
+ at DenoError (deno/js/errors.ts:22:5)
+ at maybeError (deno/js/errors.ts:41:12)
+ at handleAsyncMsgFromRust (deno/js/dispatch.ts:27:17)
+```