Помощь оказана Как запустить скрипт на Python

Dragokas

Angry & Scary Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
8,002
Решения
15
Реакции
6,795
Ребят, у вас тут куча статей в разделе.
Но можно как-нибудь подробно описать элементарную вещь? - Вот как запустить скрипт, установленный через pip install?

Вот например:

Я запускаю чистую Windows 10x64 со всеми апдейтами.
Качаю: ANSSI-FR/bits_parser желтая кнопочка Python 3.9.1.
В установщике ставлю галку Add to PATH. Устанавливаю.

Потом, запускаю CMD, в какой рабочий каталог мне перейти? Надо запускать от админа или без?
Запускаю просто:
Код:
pip install bits_parser

потом запускаю:
Код:
python
ввожу:
Код:
bits_parser
и мне говорят not found. Что я делаю не так???

Логи:
C:\Users\Alex>pip install bits_parser
Collecting bits_parser
Downloading bits_parser-1.0.1.tar.gz (11 kB)
Collecting construct==2.8.12
Downloading construct-2.8.12.tar.gz (720 kB)
|████████████████████████████████| 720 kB 1.3 MB/s
Collecting docopt==0.6.2
Downloading docopt-0.6.2.tar.gz (25 kB)
Using legacy 'setup.py install' for bits-parser, since package 'wheel' is not installed.
Using legacy 'setup.py install' for construct, since package 'wheel' is not installed.
Using legacy 'setup.py install' for docopt, since package 'wheel' is not installed.
Installing collected packages: construct, docopt, bits-parser
Running setup.py install for construct ... done
Running setup.py install for docopt ... done
Running setup.py install for bits-parser ... done
Successfully installed bits-parser-1.0.1 construct-2.8.12 docopt-0.6.2
WARNING: You are using pip version 20.2.3; however, version 21.0 is available.
You should consider upgrading via the 'c:\users\alex\appdata\local\programs\python\python39\python.exe -m pip install --upgrade pip' command.

C:\Users\Alex>python
Python 3.9.1 (tags/v3.9.1:1e5d33e, Dec 7 2020, 17:08:21) [MSC v.1927 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> bits_parser
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'bits_parser' is not defined
 
Привет, в скрипте, с которым работаешь импортируешь библиотеку.
Сам скрипт знаешь как запускать?
Код:
import bits_parser as bp
# bp далее будет работать с пространством имен библиотеки bits_parser
 
Вообще ничего не знаю.
А почему на GitHub написано гораздо проще:
Код:
bits_parser qmgr0.dat
?

Да и вообще любой скрипт какой ни откроешь написано просто установить через pip и просто юзать "скрипт" "аргументы" без каких-либо "as" и т.п.
 
# bp далее будет работать с пространством имен библиотеки bits_parser
я не понимаю, что это означает (только приблизительно).
Это куда и как надо писать. В какой среде и под какой рабочей директорией?
 
import bits_parser as bp
import bits_parser -- тут мы импортируем библиотеку.
Но я интуитивно промахнулся, а правильно будет:
import bits as bp
Здесь import bits - это подключение библиотеки, как #include<...> в c++
as bp - это псевдоним, переменная с помощью которой мы будем обращаться к пространству имен библиотеки.
Можно не использовать, но это хорошая практика, которая позволяет здорово экономить на длине имен.
Итак, в скрипте мы теперь можем и справочку посмотреть?

Python:
# -*- coding: utf-8 -*-
"""
Редактор Spyder

Это временный скриптовый файл.
"""

import bits as bp

help(bp)
Видим в консоли:
Python:
Help on package bits:

NAME
    bits - bits_parser

PACKAGE CONTENTS
    bits
    carver
    const
    helpers (package)
    sampler
    structs
    writer

DATA
    __all__ = (<class 'bits.bits.Bits'>,)

VERSION
    1.0.1

FILE
    c:\users\fire\anaconda3\envs\user_2\lib\site-packages\bits\__init__.py

Дальше даже не зная ничего о библиотеке можно немного "поскриптить" ее на предмет ключей, методов и так далее, полистать исходник - все будет видно.
Уже говорил, но еще раз решусь порекомендовать anaconda.
Заметно легче работать, крутой инструмент.
 
Это куда и как надо писать. В какой среде и под какой рабочей директорией?
Писать непосредственно в скрипт.

Пространство имен работает почти так же, как в плюсах, есть отличия но по ходу это на сейчас не играет роли)

У тебя IDLE какая стоит?
 
откуда ты взял bits?

Писать непосредственно в скрипт.
А что нельзя просто открыть питон и начать пользоваться готовым скриптом, обязательно "дописывать" чужой исходник, чтобы им пользоваться. По мне этот какой-то изврат.

Уже говорил, но еще раз решусь порекомендовать anaconda.
Понятия не имею, что это такое. А нельзя как-то по проще. Мне не нужны сокращения. Я хочу открыть GitHub, прочитать README. Выполнить всё в точности как в README, и чтобы это сразу заработало. Я не хочу дописывать чужие скрипты, не хочу что-то кодить. Хочу просто прочитать справку, и пользоваться "как есть".

У тебя IDLE какая стоит?
Не понимаю, что это и как посмотреть.
 
откуда ты взял bits?
Посмотрел в примере на гите - в репозиториях обычно есть папки script или example с образцами использования кода.
Там, в принципе, есть и тот самый готовый вариант использования скрипта.
Итак, мы импортировали библиотеку.
Теперь в нашем скрипте доступные ее функции (методы). Использовать так: bp.метод
Дальше
Это, я полагаю, корявость перевода.
Парсить файлы нужно с помощью библиотеки, не надо отдельно это делать, аргументы тоже передаются иначе.
В это вся суть python - удобство.
Документация от разраба библиотеки весьма скудная, это его косяк. Но при желании можно разобраться.
А что нельзя просто открыть питон и начать пользоваться готовым скриптом, обязательно "дописывать" чужой исходник, чтобы им пользоваться. По мне этот какой-то изврат.
Ну ты же не можешь использовать просто чужой скрипт в плюсах? Там могут какие то несовпадения быть.
Можно открыть питон, взять любую библиотеку и использовать ее внутренний опционал, библиотека это не один готовый скрипт, а набор функций и классов, их методов.
К ним ты и получаешь доступ.

Понятия не имею, что это такое. А нельзя как-то по проще. Мне не нужны сокращения. Я хочу открыть GitHub, прочитать README. Выполнить всё в точности как в README, и чтобы это сразу заработало. Я не хочу дописывать чужие скрипты, не хочу что-то кодить. Хочу просто прочитать справку, и пользоваться "как есть".

Ну тогда ты неудачно библиотеку выбрал)) Есть их очень много, какие то хорошо документированы, какие то плохо, а какие то давно заброшены.
Не понимаю, что это и как посмотреть.
Это альтернативная среда разработки:


Там и с виртуальными средами попроще.
 
Последнее редактирование:
Посмотрел в примере на гите - в репозиториях обычно есть папки script или example с образцами использования кода.
А можно мне пожалуйста ткнуть пальцем? Это в какой строчке кода?
И разве для того, чтобы пользоваться готовым скриптом, нужно заглядывать в исходник...

Это, я полагаю, корявость перевода.
Парсить файлы нужно с помощью библиотеки, не надо отдельно это делать, аргументы тоже передаются иначе.
В это вся суть python - удобство.
Документация от разраба библиотеки весьма скудная, это его косяк. Но при желании можно разобраться.
Какое удобно, я до сих пор не понимаю, как его запустить.
И при чем тут перевод, автор писал в оригинале на англ.

Ну ты же не можешь использовать просто чужой скрипт в плюсах? Там могут какие то несовпадения быть.
Можно открыть питон, взять любую библиотеку и использовать ее внутренний опционал, библиотека это не один готовый скрипт, а набор функций и классов, их методов.
К ним ты и получаешь доступ.

Ты не понял. Мне не нужно ее использовать в плюсах или в других скиптах или где-то ещё.
Я хочу запустить интерпретатор python.exe и выполнить запрос прямо в нём.
В точности как написано в README на github.

Как выполнить вот эту строчку:
Код:
bits_parser qmgr0.dat
вот прямо в точности как она и написана.
Ну или хотя бы максимально приближенно к этому, с минимальными телодвижениями,
просто один раз настроил рабочую среду, устаногвил все нужные либы,
и дальше запускаю как в README или через алиасы, как угодно, прямо внутри python.exe
 
Последнее редактирование:
Я хочу запустить интерпретатор python.exe и выполнить запрос прямо в нём.
Погоди, а ты можешь конкретно написать как ты скрипты запускаешь?
На остальное я позже отвечу.
 
Погоди, а ты можешь конкретно написать как ты скрипты запускаешь?
На остальное я позже отвечу.
так я понятия не имею как их запускать, ты мне скажи.

Запускаю CMD, потом python.exe, потом в нём хочу запустить ту строчку с github.
 
Ок, поставил я этого монстра Anaconda в полгига О_о.
Запустил Anaconda Spyder (или нужно Anaconda Prompt?)

ввел
Код:
# -*- coding: utf-8 -*-
"""
Редактор Spyder

Это временный скриптовый файл.
"""

import bits as bp

help(bp)

Ответ:
Код:
runfile('C:/Users/Alex/.spyder-py3/temp.py', wdir='C:/Users/Alex/.spyder-py3')
Traceback (most recent call last):

  File "C:\Users\Alex\.spyder-py3\temp.py", line 8, in <module>
    import bits as bp

ModuleNotFoundError: No module named 'bits'

Что я делаю не так?
И как указать аргумент - путь к файлу для парсинга, как в этом примере:
Код:
bits_parser qmgr0.dat
?
 
Полгига монстр? ))0
Смотри, anaconda это альтернативная среда разработки.
Там есть такая штука как Anaconda Promt - это консоль, установка пакетов python в Anaconda производится через нее.
Почти все команды pip install... имеют альтернативу conda install... , но pip поддерживается - его рекомендуется использовать в тех случаях, когда в репозиториях анаконда нет нужной библиотеки.
Итак, открываем Anaconda Promt (она, кстати, соответсвует виртуальному окружению профиля) и вбиваем команду
pip install bits_parser (в репозиториях анаконда я не нашел такого пакета).
Ждем установки.
Запускаем Spyder, создаем наш новый скрипт (так же можно создать проект, но пока скрипт) - иконка new file слева вверху.
Сохраним под удобным именем. Я назвал bits_test.py
Затем импортируем в наш скрипт библиотеку bits указанным ранее способом (и заодно модуль os):



Python:
import os
import bits as bp

# Зададим пока что имена и пути так
path = r'C:\ProgramData\Microsoft\Network\Downloader'
file = 'qmgr.db'

Теперь жмем F5 - выполнить сценарий скрипта.
Консоль не должна выдать ошибок.

Дальше я немного справку полистал и примерно прикинул, как работает библиотека (хотя разобрался еще надо до конца).
Создадим экземпляр класса Bits

data = bp.Bits()

Далее подгрузим наш файл qmgr.db и, конечно же, в итерируемый объект - затем в цикл:

for obj in data.load_file(os.path.join(path, file)):
print(obj)

Общий код вышел такой:

Python:
# -*- coding: utf-8 -*-
"""
Created on Tue Jan 26 15:49:18 2021

@author: Кирилл
"""

import os
import bits as bp

# Зададим пока что имена и пути так
path = r'C:\ProgramData\Microsoft\Network\Downloader'
file = 'qmgr.db'
data = bp.Bits()
for obj in data.load_file(os.path.join(path, file)):
    print(obj)

Если убрать закомментированные строки то будет прямо очень кратенько - вот оно удобство, о котором я говорил, 7 строк всего. А если надо еще можно сократить.
Получаем вывод в консоль:

Код:
2021-01-26T16:38:30.628 [WARNING] bits.bits: incoherent data, carving mode only.
2021-01-26T16:38:30.643 [WARNING] bits.bits: Job delimiter is undefined
{'error_count': 0, 'errors': [], 'transient_error_count': 0, 'retry_delay': 10, 'timeout': 35, 'ctime': datetime.datetime(2021, 1, 26, 3, 5, 34, 163954), 'mtime': datetime.datetime(2021, 1, 26, 3, 5, 34, 169948), 'other_time0': datetime.datetime(2021, 1, 26, 3, 5, 34, 169948), 'other_time1': datetime.datetime(2021, 1, 26, 3, 5, 34, 169948), 'other_time2': datetime.datetime(2021, 4, 26, 3, 5, 34, 169948), 'args': '', 'cmd': '', 'desc': '', 'name': 'PreSignInSettingsConfigJSON', 'sid': 'S-1-5-21-2452954825-142679068-1235783700-1001', 'flags': 'BG_NOTIFY_JOB_TRANSFERRED_BG_NOTIFY_JOB_ERROR', 'carved': True}

Кое что вышло с ошибками - я смотрел справку по классу, там надо некоторые аргументы задать просто.
Но, в целом, как то так. Я думаю если еще библиотеку покурить то можно полностью разобраться.

Варианты запуска скриптов/программ я позже тоже напишу, чуть позже.
 
Последнее редактирование:
Кирилл, спасибо большое за твое время. Может ещё пригодится графическая среда и примеры, когда придётся изучать более сложные скприпты и ошибки.

Но в данном случае, мне на кибере подсказали, как правильно выполнить строчку.
Надо было добавить ;py в %PATHEXT% и сменить расширение файла bits_parser на .py, потому что скрипт писался под Линукс и автор не позаботился об этом.
Теперь можно звать скрипт из любого места (как в README Github), даже без Python вообще. Он сам подтягивает.
 
Одна отдельная библиотека под всего лишь одну команду?
Первый раз такое встречаю.
То, что я написал, по сути, тоже будет работать если добить, но получается что я огородами пошёл, а тот человек, по ходу, пайтон побольше моего юзает - лихо сориентировался )
 
Последнее редактирование:
Ну, в смысле вот такое применение скрипта, как в этом случае. Не встречал.
 
Назад
Сверху Снизу