typescript 通过child_process执行命令时,如何使用node处理输入提示符?

wbgh16ku  于 2023-05-19  发布在  TypeScript
关注(0)|答案(1)|浏览(138)

对于上下文,我在Mac上,我试图通过他们的command-line tool编写1Password CLI登录脚本。我正在尝试使用以下命令以编程方式登录:

op signin <signinaddress> <emailaddress> <secretkey> --output=raw

我试过使用/不使用--output=raw参数,但每次我都得到一个错误,看起来像

[LOG] 2019/06/04 00:57:45 (ERROR) operation not supported on socket

child process exited with code 1

我最初的直觉是,它与命令执行提示符有关,在下图中显示了这个特殊的关键字符:

相关代码是用TypeScript编写的,看起来像这样:

import { spawn } from 'child_process'

// ends up being `op signin <signinaddress> <emailaddress> <secretkey>`
const op = spawn(opExecutable, args);
let result: string | null = null

op.on('message', (message, sendHandle) => {
  console.log('message', message, sendHandle)
});
op.stdout.on('data', (data) => {
  console.log(`stdout: ${data}`);
  if (data && typeof data.toString === 'function') {
    result = data.toString()
  }
});

op.on('close', (code, ...args) => {
  console.log(`child process exited with code ${code}`, args);
});

最终,我希望在所有平台上运行,并能够传入stdin作为登录所需的主密码,但我试图找出为什么我的节点应用程序首先崩溃:)

yizd12fk

yizd12fk1#

显然,我非常接近使用spawn的解决方案,但我需要指定stdio的配置。下面是我如何使用spawn的示例片段:

const proc = spawn(
  cmd, // the command you want to run, in my case `op`
  args, // arguments you want to use with the above cmd `signin`, etc.
  {
    stdio: [
      'inherit', // stdin: changed from the default `pipe`
      'pipe', // stdout
      'inherit' // stderr: changed from the default `pipe`
    ]
  });

相关问题