Страница 1 из 1
Python: rebound & Help
Добавлено: 22 ноя 2019, 16:36
Olej
TOП-50 Python-проектов в 2018: самые востребованные инструменты
Хотите сэкономить время на дебаггинге? Когда в процессе разработки компилятор выдает ошибку, больше не нужно отправляться за подсказкой на просторы Stack Overflow. Один из самых полезных Python-проектов для командной строки Rebound мгновенно извлекает с сервиса релевантные ответы.
Это как раз самое то, что нужно иметь под рукой работая с кодом Python.
GIT страница проекта здесь:
shobrook/rebound
Command-line tool that instantly fetches Stack Overflow results when an exception is thrown
Re: Python: rebound & Help
Добавлено: 22 ноя 2019, 16:40
Olej
Olej писал(а): ↑22 ноя 2019, 16:36
Это как раз самое то, что нужно иметь под рукой работая с кодом Python.
Код: Выделить всё
olej@ACER:~$ sudo apt show rebound
Package: rebound
Version: 2.0.0-1
Priority: optional
Section: misc
Maintainer: SZ Lin (林上智) <szlin@debian.org>
Installed-Size: 58,4 kB
Depends: python3-bs4, python3-requests, python3-urllib3, python3-urwid, python3:any, python3
Homepage: https://github.com/shobrook/rebound
Download-Size: 13,0 kB
APT-Manual-Installed: yes
APT-Sources: http://deb.debian.org/debian buster/main amd64 Packages
Description: Command-line tool to fetch Stack Overflow results when program execution error
Rebound is a command-line tool that instantly fetches
Stack Overflow results when getting a program execution
error in multiple programming languages. This tool will
execute the program, pull the error message if needed,
and display related Stack Overflow questions and answers
without leaving the terminal.
.
Features
.
- Supported file types:
- Python
- Node.js
- Java
- Golang
- Ruby
- View answers in command line mode
- Open browser for GUI
Обратите внимание, что
это не только для Python!
Код: Выделить всё
olej@ACER:~$ sudo apt install rebound
Чтение списков пакетов… Готово
Построение дерева зависимостей
Чтение информации о состоянии… Готово
Будут установлены следующие дополнительные пакеты:
python3-urwid
Предлагаемые пакеты:
python-urwid-doc
Следующие НОВЫЕ пакеты будут установлены:
python3-urwid rebound
Обновлено 0 пакетов, установлено 2 новых пакетов, для удаления отмечено 0 пакетов, и 64 пакетов не обновлено.
Необходимо скачать 187 kB архивов.
После данной операции объём занятого дискового пространства возрастёт на 996 kB.
Хотите продолжить? [Д/н] y
Пол:1 http://deb.debian.org/debian buster/main amd64 python3-urwid amd64 2.0.1-2+b1 [174 kB]
Пол:2 http://deb.debian.org/debian buster/main amd64 rebound all 2.0.0-1 [13,0 kB]
Получено 187 kB за 1с (194 kB/s)
Выбор ранее не выбранного пакета python3-urwid.
(Чтение базы данных … на данный момент установлено 414692 файла и каталога.)
Подготовка к распаковке …/python3-urwid_2.0.1-2+b1_amd64.deb …
Распаковывается python3-urwid (2.0.1-2+b1) …
Выбор ранее не выбранного пакета rebound.
Подготовка к распаковке …/rebound_2.0.0-1_all.deb …
Распаковывается rebound (2.0.0-1) …
Настраивается пакет python3-urwid (2.0.1-2+b1) …
Настраивается пакет rebound (2.0.0-1) …
Код: Выделить всё
olej@ACER:~$ which rebound
/usr/bin/rebound
Re: Python: rebound & Help
Добавлено: 22 ноя 2019, 16:48
Olej
Olej писал(а): ↑22 ноя 2019, 16:40
Код: Выделить всё
olej@ACER:~$ which rebound
/usr/bin/rebound
Код: Выделить всё
olej@ACER:~$ rebound --help
Rebound, V1.1.9a1 - Made by @shobrook
Command-line tool that automatically searches Stack Overflow and displays results in your terminal when you get a compiler error.
Usage: $ rebound [file_name]
$ python3 test.py => $ rebound test.py
$ node test.js => $ rebound test.js
If you just want to query Stack Overflow, use the -q parameter: $ rebound -q What is an array comprehension?
Это ncurses приложение, котрое выбират все сообщения по теме ошибки и позволяет перейти к его чтению:
Код: Выделить всё
olej@ACER:~$ rebound -q What is an array comprehension?
...
Re: Python: rebound & Help
Добавлено: 22 ноя 2019, 16:52
Olej
Olej писал(а): ↑22 ноя 2019, 16:48
Это ncurses приложение, котрое выбират все сообщения по теме ошибки и позволяет перейти к его чтению:
Только при выборе альтернативы на терминал по Enter (см. картинку выше), любой альтернативы - приложение слетает аварийно:
Код: Выделить всё
olej@ACER:~$ rebound -q What is an array comprehension?
Traceback (most recent call last):
File "/usr/bin/rebound", line 11, in <module>
load_entry_point('rebound-cli==1.1.9a1', 'console_scripts', 'rebound')()
File "/usr/lib/python3/dist-packages/rebound/rebound.py", line 844, in main
App(search_results) # Opens interface
File "/usr/lib/python3/dist-packages/rebound/rebound.py", line 733, in __init__
self.main_loop.run()
File "/usr/lib/python3/dist-packages/urwid/main_loop.py", line 286, in run
self._run()
File "/usr/lib/python3/dist-packages/urwid/main_loop.py", line 384, in _run
self.event_loop.run()
File "/usr/lib/python3/dist-packages/urwid/main_loop.py", line 788, in run
self._loop()
File "/usr/lib/python3/dist-packages/urwid/main_loop.py", line 825, in _loop
self._watch_files[fd]()
File "/usr/lib/python3/dist-packages/urwid/raw_display.py", line 404, in <lambda>
event_loop, callback, self.get_available_raw_input())
File "/usr/lib/python3/dist-packages/urwid/raw_display.py", line 502, in parse_input
callback(processed, processed_codes)
File "/usr/lib/python3/dist-packages/urwid/main_loop.py", line 411, in _update
self.process_input(keys)
File "/usr/lib/python3/dist-packages/urwid/main_loop.py", line 517, in process_input
something_handled |= bool(self.unhandled_input(k))
File "/usr/lib/python3/dist-packages/urwid/main_loop.py", line 563, in unhandled_input
return self._unhandled_input(input)
File "/usr/lib/python3/dist-packages/rebound/rebound.py", line 742, in _handle_input
question_title, question_desc, question_stats, answers = get_question_and_answers(url)
File "/usr/lib/python3/dist-packages/rebound/rebound.py", line 307, in get_question_and_answers
question_stats = soup.find_all("span", class_="vote-count-post")[0].get_text() # Vote count
IndexError: list index out of range
С этим нужно разбираться.
Но зато по выбору 'B' - во вкладку браузера - всё замечательно отображается...
Re: Python: rebound & Help
Добавлено: 22 ноя 2019, 18:18
Olej
Хороший обзор статических анализаторов кода Python:
Инструменты для анализа кода Python. Часть 1
pycodestyle
pydocstyle
pyflakes
pylint
vulture
Инструменты для анализа кода Python. Часть 2
flake8
prospector
pylama
autopep8
yapf
black
Re: Python: rebound & Help
Добавлено: 22 ноя 2019, 18:52
Olej
Olej писал(а): ↑22 ноя 2019, 18:18
Хороший обзор статических анализаторов кода Python:
Из этих анализаторов/трансформаторов кода мне симпатичен YAPF от Google ... пофигу мне неприязнь "рукопожатной" общественности к Google:
Код: Выделить всё
olej@ACER:~$ aptitude search yapf
p python-yapf - public modules for yapf (Python 2)
i A python3-yapf - public modules for yapf (Python 3)
p yapf - Python code formatter for different styles (Python 2)
i yapf3 - Python code formatter for different styles (Python 3)
Для YAPF есть Итернет-онлайн реализация, для реформатирования небольших текстов, или для ознакомления:
YAPF Online Demo:
Приятно, что YAPF позволяет выбрать для кода несколько стилей: pep8, google, chromium, facebook (на картинке использовался стиль pep8).
Исходный код был:
Код: Выделить всё
#!/usr/bin/python
# -*- coding: utf-8 -*-
import sys
if len( sys.argv ) > 1: n = int( sys.argv[ 1 ] )
else: n = int( input( "число?: " ) )
try: # Python 2
factorial = lambda z: reduce( lambda x, y: x * y, range( 1, z + 1 ) )
print( "n={} => n!={}".format( n, factorial( n ) ) )
except NameError: # Python 3
import functools
factorial = lambda z: functools.reduce( lambda x, y: x * y, range( 1, z + 1 ) )
print( "n={} => n!={}".format( n, factorial( n ) ) )
YAPF предложил его видеть в таком виде:
Код: Выделить всё
#!/usr/bin/python
# -*- coding: utf-8 -*-
import sys
if len(sys.argv) > 1: n = int(sys.argv[1])
else: n = int(input("число?: "))
try: # Python 2
factorial = lambda z: reduce(lambda x, y: x * y, range(1, z + 1))
print("n={} => n!={}".format(n, factorial(n)))
except NameError: # Python 3
import functools
factorial = lambda z: functools.reduce(lambda x, y: x * y, range(1, z + 1))
print("n={} => n!={}".format(n, factorial(n)))
Практически он поубирал пробелы после-перед функциональными скобками.
Re: Python: rebound & Help
Добавлено: 22 ноя 2019, 19:04
Olej
Olej писал(а): ↑22 ноя 2019, 18:52
Из этих анализаторов/трансформаторов кода мне симпатичен YAPF от Google ... пофигу мне неприязнь "рукопожатной" общественности к Google:
Для консольной утилиты это можно использовать так:
Код: Выделить всё
olej@ACER:~/2019_WORK/HISTORY/11/22$ yapf3 --style facebook fact3.py > fact3.2.py
olej@ACER:~/2019_WORK/HISTORY/11/22$ diff fact3.py fact3.2.py
6,7c6,9
< if len( sys.argv ) > 1: n = int( sys.argv[ 1 ] )
< else: n = int( input( "число?: " ) )
---
> if len(sys.argv) > 1:
> n = int(sys.argv[1])
> else:
> n = int(input("число?: "))
9,11c11,13
< try: # Python 2
< factorial = lambda z: reduce( lambda x, y: x * y, range( 1, z + 1 ) )
< print( "n={} => n!={}".format( n, factorial( n ) ) )
---
> try: # Python 2
> factorial = lambda z: reduce(lambda x, y: x * y, range(1, z + 1))
> print("n={} => n!={}".format(n, factorial(n)))
14,16c16,17
< factorial = lambda z: functools.reduce( lambda x, y: x * y, range( 1, z + 1 ) )
< print( "n={} => n!={}".format( n, factorial( n ) ) )
<
---
> factorial = lambda z: functools.reduce(lambda x, y: x * y, range(1, z + 1))
> print("n={} => n!={}".format(n, factorial(n)))
А вообще...
Код: Выделить всё
olej@ACER:~/2019_WORK/HISTORY/11/22$ yapf3 --help
usage: yapf3 [-h] [-v] [-d | -i] [-r | -l START-END] [-e PATTERN]
[--style STYLE] [--style-help] [--no-local-style] [-p] [-vv]
[files [files ...]]
Formatter for Python code.
positional arguments:
files Reads from stdin when no files are specified.
optional arguments:
-h, --help show this help message and exit
-v, --version show version number and exit
-d, --diff print the diff for the fixed source
-i, --in-place make changes to files in place
-r, --recursive run recursively over directories
-l START-END, --lines START-END
range of lines to reformat, one-based
-e PATTERN, --exclude PATTERN
patterns for files to exclude from formatting
--style STYLE specify formatting style: either a style name (for
example "pep8" or "google"), or the name of a file
with style settings. The default is pep8 unless a
.style.yapf or setup.cfg file located in the same
directory as the source or one of its parent
directories (for stdin, the current directory is
used).
--style-help show style settings and exit; this output can be saved
to .style.yapf to make your settings permanent
--no-local-style don't search for local style definition
-p, --parallel Run yapf in parallel when formatting multiple files.
Requires concurrent.futures in Python 2.X
-vv, --verbose Print out file names while processing