Чтение двоичных данных с stdin

Ваше требование не использовать xpath кажется очень ограничительным, так как это, безусловно, лучший метод для вашего случая использования, главным образом потому, что определение местоположения на основе css не позволяет вам выполнять точное сопоставление с текстом тега , в ваше дело название <td> с.

Для достижения этой цели с помощью CSS вы должны будете использовать некоторые потенциально ненадежные цепочечные локаторы, такие как

element(by.cssContainingText('tr','test')).element(by.css('button'));

Я говорю ненадежно, так как этот локатор фактически идентифицирует все три ваши кнопки из-за того, что все три вашего заголовка тега содержат символы «тест». Это работает в этом случае, но может вызвать проблемы в ваших реальных тестах.

Я бы серьезно рекомендовал отменить требование отсутствия xpath и перейти к следующему братскому ответу, предоставленному Пеком, поскольку это будет наиболее надежный долгосрочный период.

25
задан user2357112 supports Monica 26 September 2017 в 17:51
поделиться

4 ответа

Используйте переключатель командной строки -u , чтобы заставить Python 2 обрабатывать stdin, stdout и stderr как двоичные небуферизованные потоки.

C:> type mydoc.txt | python.exe -u myscript.py
12
ответ дан jfs 28 November 2019 в 20:40
поделиться

Вот окончательный вариант кода, совместимого с Linux / Windows Python 2/3, для чтения данных из стандартного ввода без искажений:

import sys

PY3K = sys.version_info >= (3, 0)

if PY3K:
    source = sys.stdin.buffer
else:
    # Python 2 on Windows opens sys.stdin in text mode, and
    # binary data that read from it becomes corrupted on \r\n
    if sys.platform == "win32":
        # set sys.stdin to binary mode
        import os, msvcrt
        msvcrt.setmode(sys.stdin.fileno(), os.O_BINARY)
    source = sys.stdin

b = source.read()
13
ответ дан anatoly techtonik 28 November 2019 в 20:40
поделиться

Вы можете выполнить небуферизованное чтение с помощью:

os.read(0, bytes_to_read)

, где 0 - дескриптор файла для stdin

0
ответ дан Jay 28 November 2019 в 20:40
поделиться
import sys

data = sys.stdin.read(10) # Read 10 bytes from stdin

Если вам нужно интерпретировать двоичные данные, используйте модуль struct .

-2
ответ дан 28 November 2019 в 20:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: