server.py не запускается, проблема с символом Юникода в пути
Хорошо, поэтому я пытаюсь запустить сервер с помощью Python. Когда я пытаюсь запустить сервер, я получаю следующее:
D:\Users\DearJohn28\Downloads\prgm>python3 server.py
INFO:engineio.server:Server initialized for threading.
Traceback (most recent call last):
File "server.py", line 63, in <module>
app.initialize()
File "D:\Users\DearJohn28\Downloads\prgm\app.py", line 21, in initialize
settings = initSettings()
File "D:\Users\DearJohn28\Downloads\prgm\prgm\app\settings.py", line 30, in initSettings
makedirs(settings['downloadLocation'], exist_ok=True)
File "D:\Python\Python37\lib\os.py", line 213, in makedirs
makedirs(head, exist_ok=exist_ok)
File "D:\Python\Python37\lib\os.py", line 213, in makedirs
makedirs(head, exist_ok=exist_ok)
File "D:\Python\Python37\lib\os.py", line 213, in makedirs
makedirs(head, exist_ok=exist_ok)
File "D:\Python\Python37\lib\os.py", line 223, in makedirs
mkdir(name, mode)
OSError: [WinError 123] The filename, directory name, or volume label syntax is incorrect: '\u202aD:'
Однажды у меня это работало, поэтому я не знаю, что случилось. Насколько я могу судить, когда он создает каталог, появляется символ Юникода, вызывающий ошибку OSError.
Я бы сказал, что не слишком разбираюсь в питоне, но хорошо следую указаниям.
Здесь на помощь приходит makedirs():
#!/usr/bin/env python3
import json
import os.path as path
from os import makedirs
import prgm.utils.localpaths as localpaths
settings = {}
defaultSettings = {}
def initSettings():
global settings
global defaultSettings
currentFolder = path.abspath(path.dirname(__file__))
configFolder = localpaths.getConfigFolder()
makedirs(configFolder, exist_ok=True)
with open(path.join(currentFolder, 'default.json'), 'r') as d:
defaultSettings = json.load(d)
defaultSettings['downloadLocation'] = path.join(localpaths.getHomeFolder(), 'mymedia')
if not path.isfile(path.join(configFolder, 'config.json')):
with open(path.join(configFolder, 'config.json'), 'w') as f:
json.dump(defaultSettings, f, indent=2)
with open(path.join(configFolder, 'config.json'), 'r') as configFile:
settings = json.load(configFile)
settingsCheck()
if settings['downloadLocation'] == "":
settings['downloadLocation'] = path.join(localpaths.getHomeFolder(), 'mymedia')
saveSettings(settings)
makedirs(settings['downloadLocation'], exist_ok=True)
return settings
def getSettings():
global settings
return settings
def getDefaultSettings():
global defaultSettings
return defaultSettings
def saveSettings(newSettings):
global settings
settings = newSettings
with open(path.join(localpaths.getConfigFolder(), 'config.json'), 'w') as configFile:
json.dump(settings, configFile, indent=2)
return True
def settingsCheck():
global settings
global defaultSettings
changes = 0
for x in defaultSettings:
if not x in settings or type(settings[x]) != type(defaultSettings[x]):
settings[x] = defaultSettings[x]
changes += 1
for x in defaultSettings['tags']:
if not x in settings['tags'] or type(settings['tags'][x]) != type(defaultSettings['tags'][x]):
settings['tags'][x] = defaultSettings['tags'][x]
changes += 1
if changes > 0:
saveSettings(settings)
prgm.utils.localpaths
#!/usr/bin/env python3
import os.path as path
import sys
from os import getenv
userdata = ""
homedata = path.expanduser("~")
if getenv("APPDATA"):
userdata = getenv("APPDATA") + path.sep + "mymedia" + path.sep
elif sys.platform.startswith('darwin'):
userdata = homedata + '/Library/Application Support/mymedia/'
elif getenv("XDG_CONFIG_HOME"):
userdata = getenv("XDG_CONFIG_HOME") + '/mymedia/';
else:
userdata = homedata + '/.config/mymedia/';
def getHomeFolder():
return homedata
def getConfigFolder():
return userdata
Как мне это исправить?
1 ответ
Этот звонок makedirs(settings['downloadLocation'], exist_ok=True)
похоже, указывает на то, что македирам отправляется слишком много информации. Вам нужно извлечь "downloadLocation" из настроек в вызове, запустивsettings['downloadLocation']
чтобы извлечь значение из вашего словаря.