如何在Deno运行时获取完整的命令行参数?
在Deno运行时访问完整命令行参数(包括Deno自身参数)
默认情况下,Deno.args仅返回脚本文件之后的命令行参数,像deno run --watch main.ts里的--watch这类Deno CLI自身的参数,不会被传递到脚本的运行时环境,所以直接用Deno.args拿不到。
不过有几种方式可以获取到完整的命令行参数:
类Unix系统读取进程信息
Linux、macOS等类Unix系统可以通过读取/proc/self/cmdline文件获取当前进程的完整命令行,文件内的参数以空字符\0分隔。示例代码:const cmdlineContent = await Deno.readTextFile("/proc/self/cmdline"); const fullCommandArgs = cmdlineContent.split("\0"); console.log(fullCommandArgs);执行
deno run --watch main.ts后,会输出类似["/usr/local/bin/deno", "run", "--watch", "main.ts"]的数组,从中就能提取出--watch这类参数。Windows平台调用系统命令
Windows系统可以通过wmic命令获取进程的完整命令行,示例代码:const process = Deno.run({ cmd: ["wmic", "process", "where", `processid=${Deno.pid}`, "get", "commandline", "/value"], stdout: "piped", stderr: "piped", }); const output = await process.output(); const stdout = new TextDecoder().decode(output); process.close(); const cmdlineMatch = stdout.match(/CommandLine=(.*)/); if (cmdlineMatch) { const fullArgs = cmdlineMatch[1].split(" ").filter(arg => arg); console.log(fullArgs); }执行后同样能拿到包含
--watch在内的完整参数数组。手动通过环境变量传递
启动脚本前将Deno参数存入环境变量,比如:DENO_CLI_ARGS="--watch" deno run main.ts然后在脚本内读取环境变量:
const denoArgs = Deno.env.get("DENO_CLI_ARGS"); console.log(denoArgs?.split(" "));这种方式需要手动设置环境变量,自动化程度较低,但跨平台通用。
内容的提问来源于stack exchange,提问作者lviggiani
相关产品推荐
相关产品推荐

