Драматург Python, как я могу перехватить исключение и просто изящно выйтиPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Драматург Python, как я могу перехватить исключение и просто изящно выйти

Сообщение Anonymous »

Я не могу выйти из драматургического цикла из-за KeyboardInterrupt/Exception. Он вызывается методом subprocess() в нашем CICD и всегда завершается сбоем из-за этого искажения, когда система отправляет после выполнения в течение отведенного ему времени:
(упрощенное пример с Google)

Код: Выделить всё

#!/usr/bin/env python3
"""
pip install playwright
playwright install
playwright install-deps
"""
import argparse, json, platform, sys, time
from playwright.sync_api import sync_playwright
url = "https://www.google.no"
parser = argparse.ArgumentParser(description='playwright example')
parser.add_argument('--browser', help='browser type', choices=['chrome','firefox','msedge','webkit'], default='chrome')
parser.add_argument('--headed', help='set to set headed with browser', action='store_true')
args, unknown_args = parser.parse_known_args()
if unknown_args:
print(f"unknown parameters: {unknown_args}")
sys.exit(-1)

args.headless = True
if args.headed:
args.headless = False

if platform.system()!='Darwin' and args.browser=='webkit':
print("webkit only supported on apple")
sys.exit(-1)

p = sync_playwright().start()
t0 = time.time()
if args.browser=='firefox':
browser = p.firefox.launch(headless=args.headless)
elif args.browser=='chrome':
browser = p.chromium.launch(channel='chrome', headless=args.headless)
elif args.browser=='msedge':
browser = p.chromium.launch(channel='msedge', headless=args.headless)
elif args.browser=='webkit':
browser = p.webkit.launch(headless=args.headless)
page = browser.new_page()
searches = ["python", "playwright", "selenium", "requests", "beautifulsoup"]
for search in searches:
try:
t1 = time.time()
page.goto(url)
try:
page.get_by_role("button", name="Godta alle").click(timeout=1000)
except Exception as e:
pass

page.get_by_label("Søk", exact=True).type(search)
page.get_by_label("Søk", exact=True).press("Enter")
page.locator("#tsf").get_by_role("button", name="Søk", exact=True)
time.sleep(1)
page.screenshot(path=f"pics/google-{search}.png")
except Exception:
browser.close()
sys.exit(0)
Когда я выхожу с помощью , браузер не закрывается

Код: Выделить всё

Traceback (most recent call last):
File "C:\dist\testing\exit-test.py", line 59, in 
browser.close()
File "C:\dist\venvs\testing\Lib\site-packages\playwright\sync_api\_generated.py", line 13927, in close
return mapping.from_maybe_impl(self._sync(self._impl_obj.close(reason=reason)))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\dist\venvs\testing\Lib\site-packages\playwright\_impl\_sync_base.py", line 115, in _sync
return task.result()
^^^^^^^^^^^^^
File "C:\dist\venvs\testing\Lib\site-packages\playwright\_impl\_browser.py", line 192, in close
raise e
File "C:\dist\venvs\testing\Lib\site-packages\playwright\_impl\_browser.py", line 189, in close
await self._channel.send("close", {"reason": reason})
File "C:\dist\venvs\testing\Lib\site-packages\playwright\_impl\_connection.py", line 59, in send
return await self._connection.wrap_api_call(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\dist\venvs\testing\Lib\site-packages\playwright\_impl\_connection.py", line 514, in wrap_api_call
raise rewrite_error(error, f"{parsed_st['apiName']}: {error}") from None
Exception: Browser.close: Connection closed while reading from the driver
если я просто сделаю:

Код: Выделить всё

      :
except KeyboardInterrupt:
sys.exit(0)
Иногда мне удается его почистить, но в основном:

Код: Выделить всё

Exception ignored in:  
Traceback (most recent call last):
File "C:\dist\python312\Lib\asyncio\base_subprocess.py", line 126, in __del__
File "C:\dist\python312\Lib\asyncio\base_subprocess.py", line 104, in close
File "C:\dist\python312\Lib\asyncio\proactor_events.py", line 109, in close
File "C:\dist\python312\Lib\asyncio\base_events.py", line 795, in call_soon
File "C:\dist\python312\Lib\asyncio\base_events.py", line 541, in _check_closed
RuntimeError: Event loop is closed
Exception ignored in: 
Traceback (most recent call last):
File "C:\dist\python312\Lib\asyncio\proactor_events.py", line 116, in __del__
File "C:\dist\python312\Lib\asyncio\proactor_events.py", line 80, in __repr__
File "C:\dist\python312\Lib\asyncio\windows_utils.py", line 102, in fileno
ValueError: I/O operation on closed pipe
Task was destroyed but it is pending!
task: 
Любые подсказки приветствуются :-)

Подробнее здесь: https://stackoverflow.com/questions/791 ... fully-quit
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Драматург Python, как я могу перехватить исключение и просто изящно выйти
    Anonymous » » в форуме Python
    0 Ответы
    16 Просмотры
    Последнее сообщение Anonymous
  • Можно ли заставить Polars с каламиновым двигателем выйти из строя более изящно?
    Anonymous » » в форуме Python
    0 Ответы
    44 Просмотры
    Последнее сообщение Anonymous
  • Можно ли заставить Polars с каламиновым двигателем выйти из строя более изящно?
    Anonymous » » в форуме Python
    0 Ответы
    38 Просмотры
    Последнее сообщение Anonymous
  • Как изящно выйти из ветки питона демона
    Anonymous » » в форуме Python
    0 Ответы
    5 Просмотры
    Последнее сообщение Anonymous
  • Драматург Скрэпи не может войти на сайт, но драматург это делает
    Anonymous » » в форуме Python
    0 Ответы
    25 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»