Не может что прям все идеально работает, а завтра не включится.
Если Windows Server настолько проиграл Linux в серверных войнах, то почему Microsoft не закрывает этот отдел? Значит сервера на Windows, используются.
Почему я задал этот вопрос, я как системный администратор, столкнулся с клиентом, с которым я сцепился из за того, что его разработчики и бывший сотрудник сисадмин решил установить .NET + C# + Mono + Nginx и все это на линукс.
Естественно меня это взбесило, и я просто отказался все это поддерживать, потому что извините, но .NET проще поддерживать на Windows Server
import pandas as pd
from io import StringIO
html = '''<!-- SW --><TABLE WIDTH=100%><TD CLASS=pt><A NAME="installed programs">Установленные программы</A><TR><TD><HR></TABLE><TABLE><TR><TD WIDTH=16> <TD WIDTH=16><TD><TD><TD><TD><TD><TD>
<TR><TD><TD><TD><B>Программа</B> <TD CLASS=cr><B>Версия</B> <TD CLASS=cr><B>Размер</B> <TD><B>GUID</B> <TD><B>Издатель</B> <TD CLASS=cr><B>Дата</B>
<TR><TD><TD><TD>64 Bit HP CIO Components Installer <TD CLASS=cr>16.2.1 <TD CLASS=cr>Неизвестно <TD>{F8F948EA-5AEA-4158-8821-A2F788ECE936} <TD>Hewlett-Packard <TD CLASS=cr>2023-05-18
<TR><TD><TD><TD>HP LaserJet Pro M201-M202 <TD CLASS=cr>15.0.16064.399 <TD CLASS=cr>Неизвестно <TD>{e71f6d30-080d-43ef-87e0-1ac4d7f8adfa} <TD>Hewlett-Packard <TD CLASS=cr>
<TR><TD><TD><TD>HP Unified IO <TD CLASS=cr>2.0.0.434 <TD CLASS=cr>Неизвестно <TD>{F1390872-2500-4408-A46C-CD16C960C661} <TD>HP <TD CLASS=cr>2023-05-18
<TR><TD><TD><TD>HP Update <TD CLASS=cr>5.005.002.002 <TD CLASS=cr>Неизвестно <TD>{912D30CF-F39E-4B31-AD9A-123C6B794EE2} <TD>Hewlett-Packard <TD CLASS=cr>2023-05-18
<TR><TD><TD><TD>Mesh Agent <TD CLASS=cr>2022-12-02 22:42:16.000+03:00 <TD CLASS=cr>Неизвестно <TD>Mesh Agent <TD> <TD CLASS=cr>
<TR><TD><TD><TD>Microsoft Edge <TD CLASS=cr>132.0.2957.115 <TD CLASS=cr>Неизвестно <TD>Microsoft Edge <TD>Корпорация Майкрософт <TD CLASS=cr>2025-01-20
<TR><TD><TD><TD>Microsoft Office LTSC профессиональный плюс 2021 - ru-ru <TD CLASS=cr>16.0.14332.20345 <TD CLASS=cr>Неизвестно <TD>ProPlus2021Volume - ru-ru <TD>Microsoft Corporation <TD CLASS=cr>
<TR><TD><TD><TD>Microsoft Update Health Tools <TD CLASS=cr>3.74.0.0 <TD CLASS=cr>Неизвестно <TD>{1FC1A6C2-576E-489A-9B4A-92D21F542136} <TD>Microsoft Corporation <TD CLASS=cr>2023-11-14
<TR><TD><TD><TD>Mozilla Firefox (x64 ru) <TD CLASS=cr>134.0.1 <TD CLASS=cr>Неизвестно <TD>Mozilla Firefox 134.0.1 (x64 ru) <TD>Mozilla <TD CLASS=cr>
<TR><TD><TD><TD>Mozilla Maintenance Service <TD CLASS=cr>113.0.1 <TD CLASS=cr>Неизвестно <TD>MozillaMaintenanceService <TD>Mozilla <TD CLASS=cr>
<TR><TD><TD><TD>Office 16 Click-to-Run Extensibility Component <TD CLASS=cr>16.0.14332.20345 <TD CLASS=cr>Неизвестно <TD>{90160000-008C-0000-1000-0000000FF1CE} <TD>Microsoft Corporation <TD CLASS=cr>2023-05-18
<TR><TD><TD><TD>Office 16 Click-to-Run Licensing Component <TD CLASS=cr>16.0.14332.20345 <TD CLASS=cr>Неизвестно <TD>{90160000-007E-0000-1000-0000000FF1CE} <TD>Microsoft Corporation <TD CLASS=cr>2023-05-18
<TR><TD><TD><TD>Office 16 Click-to-Run Localization Component [Русский (Россия)] <TD CLASS=cr>16.0.14332.20281 <TD CLASS=cr>Неизвестно <TD>{90160000-008C-0419-1000-0000000FF1CE} <TD>Microsoft Corporation <TD CLASS=cr>2023-05-18
<TR><TD><TD><TD>STDU Viewer version 1.6.361.0 <TD CLASS=cr>1.6.361.0 <TD CLASS=cr>Неизвестно <TD>STDU Viewer_is1 <TD>STDUtility <TD CLASS=cr>2023-05-18
<TR><TD><TD><TD>Update for x64-based Windows Systems (KB5001716) <TD CLASS=cr>8.94.0.0 <TD CLASS=cr>Неизвестно <TD>{DA80A019-4C3B-4DAA-ACA1-6937D7CAAF9E} <TD>Microsoft Corporation <TD CLASS=cr>2024-10-16
<TR><TD><TD><TD>VixWin Platinum <TD CLASS=cr>3.50.000 <TD CLASS=cr>Неизвестно <TD>{81695582-88F8-47A6-8431-C10617AF058A} <TD>Gendex <TD CLASS=cr>2023-05-19
<TR><TD><TD><TD>WinRAR 6.21 (64-разрядная) <TD CLASS=cr>6.21.0 <TD CLASS=cr>Неизвестно <TD>WinRAR archiver <TD>win.rar GmbH <TD CLASS=cr>
<TR><TD><TD><TD>КриптоПро CSP <TD CLASS=cr>5.0.12330 <TD CLASS=cr>Неизвестно <TD>{50F91F80-D397-437C-B0C8-62128DE3B55E} <TD>Компания КриптоПро <TD CLASS=cr>2023-05-18
<TR><TD><TD><TD>КриптоПро ЭЦП Browser plug-in [Русский (Россия)] <TD CLASS=cr>2.0.14816 <TD CLASS=cr>Неизвестно <TD>{E12CC7EE-36B7-4AAA-924E-2F5CD75BCECF} <TD>Компания КриптоПро <TD CLASS=cr>2023-05-18
<TR><TD><TD><TD>Платные услуги К1-1 <TD CLASS=cr>0.1 <TD CLASS=cr>Неизвестно <TD>{E59C5221-50B3-420C-84C0-DF40A1AC280E} <TD>Maximus <TD CLASS=cr>2023-05-18
<TR><TD><TD><TD>Среда выполнения Microsoft Edge WebView2 Runtime <TD CLASS=cr>131.0.2903.146 <TD CLASS=cr>Неизвестно <TD>Microsoft EdgeWebView <TD>Корпорация Майкрософт <TD CLASS=cr>2025-01-16
</TABLE><BR><BR>
'''
table = pd.read_html(StringIO(html),header=[1])[0]
print(table)
table = pd.read_html(StringIO(html),header=[1])[0]
затем выбираешь нужные тебе колонки, параметр header это с какой строки считать имя колонок, на другом примере его значение может, отличатся, по этому можешь его опустить, а выяснить нужные локации колонок, уже после. RewriteEngine On
RewriteRule ^katalog/$ https://sait.ru/katalog/index.shtml [R=301,L]
RewriteEngine On
RewriteRule ^$ https://sait.ru/index.shtml [R=301,L]
RewriteRule ^(.+)/$ https://sait.ru/$1/index.shtml [R=301,L]
Неужели для работы такого достаточно простенького кода придется обращаться к драйверам?
router := httprouter.New()
router.POST("/api/products", productsHandler.Handle)
router.POST("/api/get_free_slots", getFreeTimeSlotsHandler.Handle)
router.POST("/api/create_visit", createVisitHandler.Handle)
func(w http.ResponseWriter, r *http.Request)
type Validatable interface {
Validate() error
}
func Wrap[Req Validatable, Res any](fn func(ctx context.Context, req Req) (Res, error)) httprouter.Handle {
handler := func(writer http.ResponseWriter, request *http.Request, _ httprouter.Params) {
writeError := func(statusCode int, err error) {
writer.WriteHeader(statusCode)
_, _ = writer.Write([]byte(err.Error()))
}
var req Req
bytes, err := io.ReadAll(request.Body)
if err != nil {
writeError(http.StatusBadRequest, err)
return
}
if err := json.Unmarshal(bytes, &req); err != nil {
writeError(http.StatusBadRequest, err)
return
}
if err := req.Validate(); err != nil {
writeError(http.StatusBadRequest, err)
return
}
resp, err := fn(request.Context(), req)
if err != nil {
writeError(http.StatusInternalServerError, err)
return
}
respBytes, err := json.Marshal(resp)
if err != nil {
writeError(http.StatusInternalServerError, err)
return
}
writer.WriteHeader(http.StatusOK)
_, _ = writer.Write(respBytes)
}
return handler
}
type Handler struct {
userService *usersvc.Service
}
type Request struct {
UserID int64 `json:"user_id"`
}
func (c Request) Validate() error {
if c.UserID == 0 {
return errors.New("empty user id")
}
return nil
}
type Response struct {
Name string `json:"name"`
Age int `json:"age"`
}
func New(userService *usersvc.Service) *Handler {
return &Handler{userService: userService}
}
func (h Handler) Handle(ctx context.Context, req *Request) (*Response, error) {
user, err := h.userService.UserByID(ctx, req.UserID)
if err != nil {
return nil, err
}
return &Response{
Name: user.Name,
Age: user.Age,
}, nil
}
getUserHandler := getuser.New(userSvc)
router := httprouter.New()
router.POST("/api/get_user", wrapper.Wrap(productsHandler.getUserHandler))