#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
папке, но, по крайней мере, это работает.