[英]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.