Запуск бота Python на Ubuntu (файл или каталог не найдены?) - PullRequest
0 голосов
/ 04 августа 2020

Я запускаю бота discord.py на моем компьютере windows, но не могу запустить того же бота в Ubuntu. Я получаю сообщение об ошибке «файл не найден» для этой строки, которая является одной из первых в боте:

storm = json.load(open(r'jsons\storms.json', 'r'))['wind']

Но она существует. Вот трассировка:

File "/root/bot/utility.py", line 6, in <module>
  storm = json.load(open(r'jsons\storms.json', 'r'))['wind']
FileNotFoundError: [Errno 2] No such file or directory: 'jsons\\storms.json'

Бот работает на моем Windows компьютере, поэтому я предполагаю, что есть какая-то разница в Ubuntu или чем-то еще, так как я скопировал полный бот и все файлы на Ubuntu система.

Ответы [ 3 ]

1 голос
/ 04 августа 2020

Вы используете жестко запрограммированный маршрут Windows с backsla sh \, в Unix / Linux это sla sh /.

Вы можете получить доступ к правой разделитель с os.path.sep, он вернет \ в Windows и / в другом месте.

Но переносимый способ будет использовать функцию соединения из os.path, например:

import os

storms_path = os.path.join('jsons', 'storms.json')
storm = json.load(open(storms_path, 'r'))['wind']

Это отформатирует ваши пути с использованием правильного разделителя и позволит избежать ряда ошибок, с которыми вы можете столкнуться при создании собственных.

здесь документы os.path

1 голос
/ 04 августа 2020

Вместо жесткого кодирования путей стилей windows или linux вы можете переключиться на более надежную реализацию с использованием стандартной библиотеки pathlib с помощью python: https://docs.python.org/3/library/pathlib.html

Минимальный пример будет выглядеть так:

from pathlib import Path
folder = Path("add/path/to/file/here/")
path_to_file = folder / "some_random_file.xyz"
f = open(path_to_file)

Обратите внимание, как вы можете легко использовать оператор / после инициализации объекта Path, чтобы добавить, например, имя файла.

В вашем кейс для файла json:

import json
from pathlib import Path
folder = Path("jsons/")
path_to_file = folder / "storms.json"
storm = json.load(open(path_to_file, 'r'))['wind']
1 голос
/ 04 августа 2020

ubuntu использует '/' вместо '\'. поэтому вместо:

storm = json.load(open(r'jsons\storms.json', 'r'))['wind']

используйте:

storm = json.load(open(r'jsons/storms.json', 'r'))['wind']

, он должен работать.

...