mirror of https://github.com/scrapy/scrapy.git
49 lines
1.3 KiB
Python
49 lines
1.3 KiB
Python
from __future__ import annotations
|
|
|
|
import subprocess
|
|
import sys
|
|
from typing import TYPE_CHECKING, Any
|
|
|
|
import pytest
|
|
|
|
from scrapy.utils.test import get_testenv
|
|
|
|
if TYPE_CHECKING:
|
|
from pathlib import Path
|
|
|
|
|
|
def call(*args: str, **popen_kwargs: Any) -> int:
|
|
args = (sys.executable, "-m", "scrapy.cmdline", *args)
|
|
return subprocess.call(
|
|
args,
|
|
stdout=subprocess.DEVNULL,
|
|
stderr=subprocess.DEVNULL,
|
|
env=get_testenv(),
|
|
**popen_kwargs,
|
|
)
|
|
|
|
|
|
def proc(*args: str, **popen_kwargs: Any) -> tuple[int, str, str]:
|
|
args = (sys.executable, "-m", "scrapy.cmdline", *args)
|
|
try:
|
|
p = subprocess.run(
|
|
args,
|
|
check=False,
|
|
capture_output=True,
|
|
encoding="utf-8",
|
|
timeout=15,
|
|
env=get_testenv(),
|
|
**popen_kwargs,
|
|
)
|
|
except subprocess.TimeoutExpired:
|
|
pytest.fail("Command took too much time to complete")
|
|
|
|
return p.returncode, p.stdout, p.stderr
|
|
|
|
|
|
def write_recording_editor(editor: Path) -> None:
|
|
"""Create an executable editor script that writes the path it is asked to
|
|
open (its last argument) into the file given as its first argument."""
|
|
editor.write_text('#!/bin/sh\nprintf "%s" "$2" > "$1"\n', encoding="utf-8")
|
|
editor.chmod(0o755)
|