qiniu / qiniu/qshell

使用nodejs的 child_process.exec(Sync) 执行 qshell get <Bucket> <Key> [-o <OutFile>]下载成功但会以非0退出

Open
#372 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
Go
Stars
1k
Forks
199
Avg merge
1d 12m
Merged PRs (30d)
1

Description

问题描述

使用nodejs的 child_process.exec(Sync) 执行 qshell get [-o ]下载成功但会以非0退出

重现步骤
const { execSync } = require('child_process');
execSync(qshell get <Bucket> <Key> [-o <OutFile>]);

执行以上代码会出现如下错误

Error: Command failed: qshell get <bucket> "***********" --outfile="*************" --remove-temp-while-error=true 
    at checkExecSyncError (child_process.js:760:11)
    at execSync (child_process.js:833:15)
    at runCommand (/Volumes/code/sc-mce-pc-teacher/src/utils/NodeEnv.js:76:3)
    at Object.<anonymous> (/Volumes/code/sc-mce-pc-teacher/.bin/notarize:37:1)
    at Module._compile (internal/modules/cjs/loader.js:1072:14)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1101:10)
    at Module.load (internal/modules/cjs/loader.js:937:32)
    at Function.Module._load (internal/modules/cjs/loader.js:778:12)
    at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:76:12)
    at internal/main/run_main_module.js:17:47 {
  status: 1,
  signal: null,
  output: [
    null,
    Buffer(8945) [Uint8Array] [
       91,  73,  93,  32,  32,  68, 111, 119, 110, 108, 111,  97,
      100,  32,  91, 104, 117, 111, 104, 117,  97,  58, 111, 110,
      108, 105, 110, 101,  47, 115,  99,  45, 109,  99, 101,  45,
      112,  99,  45, 116, 101,  97,  99, 104, 101, 114,  45, 115,
      105, 103, 110, 101, 100,  45, 102, 111, 114, 116, 101, 115,
      116,  47,  49,  57,  51,  48,  52,  55,  56,  47,  86, 105,
      115, 112,  97, 114, 107,  32,  67, 108,  97, 115, 115, 114,
      111, 111, 109,  45,  49,  46,  48,  46,  52,  46, 100, 109,
      103,  93,  32,  61,
      ... 8845 more items
    ],
    Buffer(0) [Uint8Array] []
  ],
  pid: 75398,
  stdout: Buffer(8945) [Uint8Array] [
     91,  73,  93,  32,  32,  68, 111, 119, 110, 108, 111,  97,
    100,  32,  91, 104, 117, 111, 104, 117,  97,  58, 111, 110,
    108, 105, 110, 101,  47, 115,  99,  45, 109,  99, 101,  45,
    112,  99,  45, 116, 101,  97,  99, 104, 101, 114,  45, 115,
    105, 103, 110, 101, 100,  45, 102, 111, 114, 116, 101, 115,
    116,  47,  49,  57,  51,  48,  52,  55,  56,  47,  86, 105,
    115, 112,  97, 114, 107,  32,  67, 108,  97, 115, 115, 114,
    111, 111, 109,  45,  49,  46,  48,  46,  52,  46, 100, 109,
    103,  93,  32,  61,
    ... 8845 more items
  ],
  stderr: Buffer(0) [Uint8Array] []
}
error Command failed with exit code 1.

或者

const { exec } = require('child_process');
exec(qshell get <Bucket> <Key> [-o <OutFile>], (error, stdout, stderr) => {
      stdout && console.log(stdout);
      stderr && console.error(stderr);
      error && console.error(error);
      error && process.exit(1);
    })

执行以上代码会出现如下错误

Error: Command failed: qshell get <bucket> "**************" --outfile="*************" --remove-temp-while-error=true 
    at checkExecSyncError (child_process.js:760:11)
    at execSync (child_process.js:833:15)
    at /Volumes/code/sc-mce-pc-teacher/src/utils/NodeEnv.js:77:5
    at new Promise (<anonymous>)
    at runCommand (/Volumes/code/sc-mce-pc-teacher/src/utils/NodeEnv.js:76:10)
    at fun (/Volumes/code/sc-mce-pc-teacher/.bin/notarize:37:9)
    at Object.<anonymous> (/Volumes/code/sc-mce-pc-teacher/.bin/notarize:39:1)
    at Module._compile (internal/modules/cjs/loader.js:1072:14)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1101:10)
    at Module.load (internal/modules/cjs/loader.js:937:32)
(Use `node --trace-warnings ...` to show where the warning was created)
(node:75710) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag `--unhandled-rejections=strict` (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 2)
(node:75710) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
期望结果?
  • 下载成功以status为0成功退出
实际结果?
  • the Node.js process with a non-zero exit code.
错误日志/截图/配置参数

image

相关环境信息
  • 操作系统:macOS 13.0.1 (22A400)
  • qshell版本: qshell version v2.9.2

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start at the qshell get command implementation and reproduce the download through Node.js child_process.exec and execSync on macOS. Trace why a successful download returns status 1, then add or update coverage for the command so a successful download exits with status 0.

Written by the indexing model from the issue text.

Assessment

Tech stack
go, node.js
Domain
cli
Issue type
Bug
Difficulty
3/5
Estimated time
1-2 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.