IIS flask не может запускать команды с правами администратора

#python #flask #iis

#python #flask #iis

Вопрос:

Я застрял в этой настройке почти на неделю. Надеюсь, что кто-нибудь сможет провести меня через это.

Настройка

  1. Я настроил сервер IIS, на котором выполняется код Flask python. (Используя wfastcgi.py )

  2. Я настроил идентификатор пула приложений для своей учетной записи. (Разрешение администратора)

  3. Я изменил разрешения для всех файлов, которые необходимы для этого веб-развертывания, на «Все» — полный контроль (чтение, запись, выполнение). (Я понимаю риски безопасности, это моя промежуточная среда.)

  4. Веб-сервер работает нормально, и я проверил, используя нижний код, чтобы узнать, что мое разрешение на python является администраторским.

      def am_i_admin():
         try:
             is_admin = os.getuid() == 0
         except AttributeError:
             is_admin = ctypes.windll.shell32.IsUserAnAdmin() != 0
         if is_admin == True:
             return "ADMIN"
         else:
             return "USER"
      

Заявление о проблеме

  1. Я пытаюсь запустить приватный код администратора на моем сервере flask IIS, который позволяет выполнять пользователю в той же сети; например

      subprocess.run(['ipconfig'], stdout=subprocess.PIPE)
    
     pyautogui.screenshot() #which take a screenshot of the web server and send over to the client.
      
  2. Я работал на своем локальном ноутбуке jupyter, и вышеупомянутые функции работали отлично.

  3. Но ему не удалось запустить на сервере IIS flask.

  4. Я также попытался настроить pyautogui на сервере flask (автономно, без IIS), это сработало.

  5. В чем проблема с сервером IIS?? Или есть еще что-то, что мне нужно настроить. Существуют ли функции безопасности, которые я могу отключить?

Сообщение об ошибке подпроцесса:

 Error occurred while reading WSGI handler:

Traceback (most recent call last):
  File "c:usersaspnetanaconda3libsite-packageswfastcgi.py", line 791, in main
    env, handler = read_wsgi_handler(response.physical_path)
  File "c:usersaspnetanaconda3libsite-packageswfastcgi.py", line 633, in read_wsgi_handler
    handler = get_wsgi_handler(os.getenv("WSGI_HANDLER"))
  File "c:usersaspnetanaconda3libsite-packageswfastcgi.py", line 600, in get_wsgi_handler
    handler = __import__(module_name, fromlist=[name_list[0][0]])
  File ".my_app.py", line 58, in <module>
    out = os.popen("ipconfig").read()
  File "c:usersaspnetanaconda3libos.py", line 990, in popen
    bufsize=buffering)
  File "c:usersaspnetanaconda3libsubprocess.py", line 753, in __init__
    errread, errwrite) = self._get_handles(stdin, stdout, stderr)
  File "c:usersaspnetanaconda3libsubprocess.py", line 1090, in _get_handles
    errwrite = _winapi.GetStdHandle(_winapi.STD_ERROR_HANDLE)
OSError: [WinError 6] The handle is invalid


StdOut: 

StdErr: 
  

ошибка pyautogui:

 Error occurred while reading WSGI handler:

Traceback (most recent call last):
  File "c:usersaspnetanaconda3libsite-packageswfastcgi.py", line 791, in main
    env, handler = read_wsgi_handler(response.physical_path)
  File "c:usersaspnetanaconda3libsite-packageswfastcgi.py", line 633, in read_wsgi_handler
    handler = get_wsgi_handler(os.getenv("WSGI_HANDLER"))
  File "c:usersaspnetanaconda3libsite-packageswfastcgi.py", line 600, in get_wsgi_handler
    handler = __import__(module_name, fromlist=[name_list[0][0]])
  File ".my_app.py", line 45, in <module>
    pyautogui.screenshot()
  File "c:usersaspnetanaconda3libsite-packagespyscreeze__init__.py", line 135, in wrapper
    return wrappedFunction(*args, **kwargs)
  File "c:usersaspnetanaconda3libsite-packagespyscreeze__init__.py", line 427, in _screenshot_win32
    im = ImageGrab.grab()
  File "c:usersaspnetanaconda3libsite-packagesPILImageGrab.py", line 44, in grab
    include_layered_windows, all_screens
OSError: screen grab failed


StdOut: 

StdErr: 
  

Ответ №1:

Файл «c:usersaspnetanaconda3libsite-packagesPILImageGrab.py «, строка 44, в grab include_layered_windows, ошибка ОС all_screens: ошибка захвата экрана

Чтобы решить проблему, установите stderr и stdin в subprocess.КАНАЛ:

 ['where', 'wkhtmltopdf'], stdout=subprocess.PIPE, stdin=subprocess.PIPE, stderr=subprocess.PIPE).communicate()[0].strip()
  

Ссылка:https://github.com/foliojs/pdfkit/issues/714

Файл «c:usersaspnetanaconda3libsite-packagesPILImageGrab.py «, строка 44, в grab include_layered_windows, ошибка ОС all_screens: ошибка захвата экрана

Используйте приведенный ниже код:

 from PIL import ImageGrab
  

или

 from PIL import Image