簡體   English   中英

aws lambda 中的節點 execFile python 腳本

[英]node execFile python script in aws lambda

我正在嘗試通過 AWS lambda 上托管的節點服務執行腳本,但始終得到 ENOENT 異常。

2020-04-22 07:55:14.613 (-04:00)    9c8c54fc-2aa2-4d17-89d9-ca1e404191b7    ERROR   Error: spawn ./bin/test-bin.py ENOENT
    at Process.ChildProcess._handle.onexit (internal/child_process.js:267:19)
    at onErrorNT (internal/child_process.js:469:16)
    at processTicksAndRejections (internal/process/task_queues.js:84:21) {
  errno: 'ENOENT',
  code: 'ENOENT',
  syscall: 'spawn ./bin/test-bin.py',
  path: './bin/test-bin.py',
  spawnargs: [ 1, 2 ],
  cmd: './bin/test-bin.py 1 2'
}

在子進程中執行cat bin/test-bin.py會吐出腳本的源代碼,通過子進程ls -l顯示腳本是可執行的,同樣的代碼在我的linux機器上本地運行。

  const { execFile } = require('child_process');
  execFile('cat', ["bin/test-bin.py"], (err, out) => {
    if (err) {
        console.error(err)
    }
    else {
      console.log(out)
    }
  });

劇本:

#!/usr/bin/python

import sys
import time

def sum(n1, n2):
  return int(n1) + int(n2)

print(sum(sys.argv[1], sys.argv[2]))

您的 python 腳本不是獨立的可執行文件 - 它依賴於 shell 解釋文件頂部的#!/usr/bin/python行以加載 Z23EEEB4347BDD26BFC6B7EE9A3B755/DDZ,然后運行腳本 ( /usr/bin/python DDZ) .

因為execFile不加載 shell,所以它不會這樣做。 您可以只使用exec而不是execFile ,但這不太安全,而且速度較慢。

相反,使用execFile運行/usr/bin/python ,並將您的腳本作為參數:

execFile('/usr/bin/python', ['bin/test-bin.py'], (err, out) => {
   // ...
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM