Не удается найти модуль: Python, NodeJS и модуль fs

#python #node.js #json #subprocess #fs

Вопрос:

С помощью Python я создаю скрипт, который запрашивает ввод (действие). Второй вариант запускает файл NodeJS, вызываемый settings.js в новом окне терминала с:

 subprocess.call('start node src/settings.js', shell=True)`
 

В файле NodeJS settings.js он в основном используется fs для перезаписи значения ключа config.json . В этом случае измените ключ "PREFIX" на то, что вводит пользователь (например ! ).

Когда он впервые читает config.json файл, он показывает ошибку.

Код:

 await fs.readFile('config.json', 'utf8', async (err, data) => {
    // code to overwrite (with given data)
}
 

Ошибка:

 [Error: ENOENT: no such file or directory, open 'C:UsersuserhereDesktopserenity-zeroserenity-zero-testconfig.json'] {
  errno: -4058,
  code: 'ENOENT',
  syscall: 'open',
  path: 'C:\Users\userhere\Desktop\serenity-zero\serenity-zero-test\config.json'
}
 

Я решил, что это произошло так, как изначально запускалось из python сценария, поэтому папка каталога находилась за пределами файла NodeJS ( python каталог папки сценария). Я пытался:

 await fs.readFile('src/config.json', 'utf8', async (err, data) => {
    // code
});
 

и,

 await fs.readFile('./src/config.json', 'utf8', async (err, data) => {
    // code
});
 

Но, я получил:

 (node:17348) UnhandledPromiseRejectionWarning: Error: Cannot find module './src/config.json'
Require stack:
- C:UsersuserhereDesktopserenity-zeroserenity-zero-testsrcsettings.js
    at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)
    at Function.Module._load (internal/modules/cjs/loader.js:725:27)
    at Module.require (internal/modules/cjs/loader.js:952:19)
    at require (internal/modules/cjs/helpers.js:88:18)
    at C:UsersuserhereDesktopserenity-zeroserenity-zero-testsrcsettings.js:29:87
    at FSReqCallback.readFileAfterClose [as oncomplete] (internal/fs/read_file_context.js:63:3)
(Use `node --trace-warnings ...` to show where the warning was created)
(node:17348) 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: 1)
(node:17348) [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.
 

Просто, чтобы вы знали, это прекрасно работало, когда python сценарий находился в той же папке, node.js что и файлы. Я хотел сделать его более организованным, поэтому я поместил node.js файлы в src папку. python Сценарий остался в исходной папке. После этого я получил эту ошибку.

Ответ №1:

Просто исправил это, все, что мне нужно было сделать, это поместить файл config.json в тот же каталог, launch.py что и файл. Я не думаю, что это возможно для config.json того, чтобы быть в src папке, но, по крайней мере, это работает.