Лабораторная работа №1 ЯП. Лабораторная работа 1 по дисциплине Языки программирования Сценарий 1 Командная оболочка Python
Скачать 378.71 Kb.
|
Лабораторная работа №1 по дисциплине «Языки программирования» Сценарий 1: Командная оболочка Python 1. Запустите командную оболочку интерпретатора Python версии 3. greg@earth:/python_examples$ python3 Python 3.4.3 (default, Oct 14 2015, 20:28:29) [GCC 4.8.4] on linux Type "help", "copyright", "credits" or "license" for more information. Теперь вы находитесь в командной оболочке python. Здесь вы можете выполнять действия, но для начала разберёмся с тем, что у нас получилось. Первым делом вы увидите версию интерпретатора python. Затем вы увидите сообщение о том, что для получения справки необходимо набрать «help» в командной строке. 2. Выполните простейшие арифметические операции в командной оболочке интерпретатора Python. print (2+2) Внимание, имена операторов и команд вводить в нижнем регистре. var = 2+2 После предыдущей операции вы увидите, что ничего не происходит, за исключением того, что Python отобразит приглашение «>>>». Всё нормально. Мы поручили Python создать переменную под названием «var» и положить в неё результат сложения «2+2». Чтобы увидеть, что теперь находится в переменной «var», введите: print (var) Повторим работу с переменной: print (var * 2) Проверить содержимое переменной: print (var) Переменная «var» не изменилась. В ней осталась храниться сумма 2+2, то есть 4. 3. Выполните простейшие текстовые операции в командной оболочке интерпретатора Python. strng = 'The time has come for all good men to come to the aid of the party!' print (strng) Вы создали переменную под названием «strng», которая содержит значение «The time has come for all good men to come to the aid of the party!». С этого момента (пока мы работаем с этим экземпляром интерпретатора) переменная «strng» будет содержать то же значение, пока мы её не изменим. Что будет, если мы попробуем умножить эту переменную на 4? print (strng * 2) Произошло не совсем то, что вы ожидали. Python напечатал значение переменной «strng» 2 раза. Почему? Интерпретатор знал, что переменная «strng» — это строка, а не число. Невозможно производить математические операции над строками. Если бы у нас была переменная под названием «s», которая содержала бы значение «4» как показано ниже: s = '4' print (s) 4 Кажется, что переменная «s» содержит число 4, но это не так. Она содержит текстовое значение «4». И если мы наберем «print (s * 4)», то получим… print (s*4) 4444 Снова интерпретатор знает, что переменная «s» — это строка, а не число. Он знает это, потому что мы взяли число 4 в одинарные кавычки, что означает, что оно является строкой. Мы можем проверить это, набрав «print type(s)», чтобы увидеть, какой тип система присвоила данной переменной. print (type(s)) Подтверждено. Переменная имеет тип «строка». Если мы захотим использовать её в качестве числа, то мы напечатаем следующее: print (int(s) * 4) 16 Строка «s», содержащая значение «4», преобразована в число и умножена на 4, что равно 16. Проверьте, какой тип переменной система присвоила вашей переменной strng. Для выхода из командной оболочки интерпретатора Python необходимо нажать комбинацию клавиш «Ctrl-D» Сценарий 2: Списки 1. Запустите командную оболочку интерпретатора Python версии 3. 2. Рассмотрим другой тип переменных, который называется списки. В других языках программирования они называются массивами. Посмотрим на простой список — список месяцев. Мы запрограммируем его так: months = ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'] Чтобы создать список, мы заключили все значения в квадратные скобки ( '[' и ']' ). Мы назвали наш список 'months'. Чтобы использовать список, мы дадим команду print (months[0]) или months[1] (которые выведут на экран 'Jan' или 'Feb'). Помните: счет начинается с нуля. Чтобы найти длину списка, можно использовать такую функцию: print (len(months)) 3. Задать список студентов группы ZB##, где ## – номер группы (задать 6 имен в списке). 4. Вывести на экран 1-го, 3-го и 6-го студента группы. 5. До сих пор мы создавали списки, хранящие строки. Также можно создать списки, содержащие числа. Опираясь на список месяцев, мы сможем создать список дней в каждом из месяцев. DaysInMonth = [31,28,31,30,31,30,31,31,30,31,30,31] Если мы захотим напечатать DaysInMonth[1] (для февраля), мы получим 28 — целое число. Обратите внимание на название списка DaysInMonth. Мы могли бы называть список 'daysinmonth' или даже 'X'… но такие названия нелегко читать. Правила хорошего программирования (их каждый истолковывает по-своему) гласят, что имена переменных должны быть легко читаемы. 6. Проверьте, какой тип переменной система присвоила вашей переменной из предыдущего пункта. Для выхода из командной оболочки интерпретатора Python необходимо нажать комбинацию клавиш «Ctrl-D». Сценарий 3: Строки 1. Запустите командную оболочку интерпретатора Python версии 3. 2. Строка — это набор символов и ничего более. В принципе можно рассматривать строки как массив из символов. Например, если мы присвоим переменной strng значение 'The time has come' и захотим посмотреть второй символ строки, то можно набрать: strng = 'The time has come' print (strng[1]) Результат будет символ 'h'. Запомните: счёт начинается с 0, поэтому первый символ обозначается [0], второй — [1], третий — [2], и так далее. Если мы хотим отобразить символы начиная с положения 4 и заканчивая положением 8, то набираем: print (strng[4:8]) Результат будет 'time'. Чтобы найти длину строки используем функцию len(): print (len(strng)) Результатом будет 17. Если мы хотим найти, где в строке находится слово 'time', то набираем pos = strng.find('time') Теперь переменная pos равна 4, что означает, что строка 'time' в нашей строке начинается в положении 4. Если мы захотим найти слово или последовательность, которых нет в строке, как например: pos = strng.find('apples') Значение переменной pos будет равно -1. Для выхода из командной оболочки интерпретатора Python необходимо нажать комбинацию клавиш «Ctrl-D». Сценарий 4: Программа в Python 1. Создайте файл hello.py в директории python_labs (директорию создать предварительно) своей домашней директории. Введите эти 4 строки: #!/usr/bin/env python3 print ("Hello. I am a python program.") name = input("What is your name?") print ("Hello there, " + name + "!") Для запуска программы нужно сделать её файл исполняемым, т.е. добавить права на выполнение. 2. Запустите hello.py в директории python_labs своей домашней директории. greg@earth:/python_labs$ ./hello.py Hello. I am a python program. What is your name? Ferd Burphel Hello there, Ferd Burphel! Запустить программу можно также командой python3 hello.py. Рассмотрим, что делает каждая строка программы. #!/usr/bin/env python3 Эта строка сообщает системе, что для запуска программы необходимо использовать интерпретатор Python версии 3. print ("Hello. I am a python program.") Эта строка просто печатает в окне терминала Hello. I am a python program. name = input("What is your name? ") Эта строка немного сложнее. В ней две части. Первая часть: name = и вторая часть: input("What is your name? "). Сначала рассмотрим вторую часть. Команда input печатает вопрос в терминале (“What is your name?») и ожидает, пока пользователь (вы) не напечатает что-нибудь (и не нажмёт {Enter}). Теперь рассмотрим первую часть команды: name =. Она создаёт переменную под названием «name». В нашем примере она хранит то, что вы напечатаете. В данной программе Python просто берёт введённое значение и сохраняет его в «name», чтобы использовать в программе в дальнейшем. print ("Hello there, " + name + "!") В этой строке мы опять используем команду print для вывода текста на экран, в данном случае для вывода «Hello there, » и того, что хранится в переменной «name» и восклицательного знака в конце. В данной строке мы соединяем три куска текста: «Hello there», информацию в переменной «name» и восклицательный знак. Сценарий 5: Пример цикла For 1. Рассмотрим пример программирования цикла. Создайте файл for_py.py в директории python_labs своей домашней директории и наберите следующую программу. #!/usr/bin/env python3 for cntr in range(0,10): print (cntr) Не забудьте поставить символ табуляции или пробела перед строкой «print (cntr)». Это важно. В Python для указания на блоки кода используются не круглые «(» и фигурные «{» скобки как в других языках программирования, а отступы. Цикл — это код, выполняющий определённую инструкцию или набор инструкций определённое число раз. В нашей программе мы выполним цикл 10 раз, печатая значение переменной «cntr». Вот перевод команды на русский язык «присвоить переменной «cntr» значение 0, выполнить печать значения переменной «cntr», прибавить к переменной «cntr» 1 и повторить это 10 раз». Выглядит довольно просто. Часть кода «range(0,10)» говорит: начать с 0, повторять, пока значение переменной «cntr» не будет равно 10, и выйти. Для запуска программы нужно сделать её файл исполняемым, т.е. добавить права на выполнение. 2. Запустите for_py.py в директории python_labs своей домашней директории. Кажется, программа работает, но почему она считает только до 9 и останавливается? Посмотрите её вывод. Напечатано 10 цифр: от 0 до 9. Это то, что мы запрограммировали: напечатать значение переменной «cntr» 10 раз, каждый раз добавляя единицу к переменной, и выйти, когда её значение будет равно 10. Если вы измените команду «range» на «range(1,10)», она начнёт считать с 1, но остановится на 9, так как при достижении верхнего порога (10) цикл прерывается. Чтобы заставить программу печатать «1,2,3,4,5,6,7,8,9,10», надо заменить команду на «range(1,11)», так как цикл «for» прерывается при достижении второго числа в команде «range». Обратите внимание на синтаксис цикла. Двоеточие в команде «for переменная in range(начальное значение, конечное значение):» означает начало блока кода, который должен быть смещен вправо. Вы должны использовать двоеточие «:» и смещать код вправо до конца блока — это очень важно. Сценарий 6: Подстановка переменных 1. Запустите командную оболочку интерпретатора Python версии 3. 2. Задать список месяцев Months. 3. Если мы хотим напечатать строку, включающую текст и переменную, можно использовать подстановку переменных. Если мы хотим подставить строку, мы пишем '%s' и затем говорим Python, что надо подставить. Например, чтобы напечатать название месяца из нашего списка, можно использовать: print ('Month = %s' % Months[0]) Эта команда выведет 'Month = Jan'. 4. Если хотите подставить целое число, используйте '%d'. Рассмотрим пример ниже: Months = ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'] DaysInMonth = [31,28,31,30,31,30,31,31,30,31,30,31] for cntr in range(0,12): print ('%s has %d days.' % (Months[cntr], DaysInMonth[cntr])) Здесь необходимо понять то, как используются одинарные и двойные кавычки. Если вы присваиваете переменной строку так: st = 'The time has come' или так: st = "The time has come" , разницы никакой нет. Но если надо включить в строку одинарную кавычку, как в примере ниже: st = 'He said he's on his way' вы увидите ошибку синтаксиса. Надо делать так: st = "He said he's on his way" Думайте о кавычках так. Чтобы определить строку, нужно поместить её между кавычками — одна в начале строки, а другая в конце — и они должны совпадать. Если вам надо вставить кавычки внутрь, используйте другой тип внешних кавычек, как в примере сверху. У вас может появиться вопрос, а если я захочу определить строку подобную “She said “Don't Worry””? В таком случае можно определить её так: st = 'She said "Don\'t Worry"' Обратите внимание на обратный слэш перед одинарной кавычкой в 'Don't'. Он называется экранирующим символом и сообщает Python, что в этом случае надо напечатать одинарную кавычку, не считая её разграничителем строк. Существует много последовательностей управляющих символов. Некоторые из них: '\n' — новая строка, '\t' — табуляция. Для выхода из командной оболочки интерпретатора Python необходимо нажать комбинацию клавиш «Ctrl-D». Сценарий 7: Оператор if 1. Рассмотрим пример принять решения, основываясь на значениях переменных, когда используется оператор if/elif/else. Создайте файл if_py.py в директории python_labs своей домашней директории и наберите следующую программу. #!/usr/bin/env python3 x = int(input("Enter num!")) if x == 1: print ('X is 1') elif x < 6: print ('X is less than 6') elif x < 10: print ('X is less than 10') else: print ('X is 10 or greater') 2. Запустите if_py.py в директории python_labs своей домашней директории. Обратите внимание: мы используем оператор '<' для проверки, что x МЕНЬШЕ, ЧЕМ определенное значение — в этом случае 6 и 10. Другие часто используемые операторы сравнения: больше чем '>', меньше, чем или равно '<=', больше чем или равно '>=' и не равно '!='. Сценарий 8: Оператор while 1. Рассмотрим пример программирования цикла. Создайте файл while_py.py в директории python_labs своей домашней директории и наберите следующую программу. #!/usr/bin/env python3 loop = 1 while loop <= 10: print (loop) loop = loop + 1 2. Запустите while_py.py в директории python_labs своей домашней директории. Этот оператор позволяет повторять цикл из действий несколько раз до достижения определенного порогового значения. В данном примере мы присваиваем переменной «loop» значение 1. Затем, пока значение переменной loop меньше или равно 10, выводим значение переменной «loop», прибавляя к нему 1 и продолжая до тех пор, пока переменная «loop» не станет больше 10. 3. Рассмотрим другой пример, где используются вместе оператор if, цикл while и команда input. Создайте файл while_py_strong.py в директории python_labs своей домашней директории и наберите следующую программу. #!/usr/bin/env python3 loop = 1 while loop == 1: response = input("Enter something or 'quit' to end => ") if response == 'quit': print ('quitting') loop = 0 else: print ('You typed %s' % response) 4. Запустите while_py_strong.py в директории python_labs своей домашней директории. Сценарий 9: Функции 1. Создайте файл function_strong.py в директории python_labs своей домашней директории. Введите эти строки: #!/usr/bin/env python3 def myfunc(a, b, c=4): d = b ** 2 - 4 * a*c return d ** 0.5 x = int(input("Введите коэффициент a!\n")) y = int(input("Введите коэффициент b!\n")) print (myfunc(x, y)) Функция в python - объект, принимающий аргументы и возвращающий значение. Обычно функция определяется с помощью инструкции def. Функция может принимать произвольное количество аргументов или не принимать их вовсе. Также распространены функции с произвольным числом аргументов, функции с позиционными и именованными аргументами, обязательными и необязательными. 2. Запустите function_strong.py в директории python_labs своей домашней директории. Сценарий 10: Работа с файлами 1. Создайте файл file_open_1.py в директории python_labs своей домашней директории. Введите эти строки: #!/usr/bin/env python3 f = open('function_strong.py') print(f.read()) f.close() Открываем файл, далее читаем из него информацию. Для этого есть несколько способов, но большого интереса заслуживают лишь два из них. Первый - метод read, читающий весь файл целиком, если был вызван без аргументов, и n символов, если был вызван с аргументом (целым числом n). 2. Запустите file_open_1.py в директории python_labs своей домашней директории. 3. Создайте файл file_open_2.py в директории python_labs своей домашней директории. Введите эти строки: #!/usr/bin/env python3 f = open('function_strong.py') for line in f: print(line) f.close() Ещё один способ прочитать файл - прочитать его построчно, воспользовавшись циклом for. У функции open много параметров, но нам пока важны 3 аргумента: первый, это имя файла. Путь к файлу может быть относительным или абсолютным. Второй аргумент, это режим, в котором мы будем открывать файл. Режим Обозначение 'r' открытие на чтение (является значением по умолчанию) 'w' открытие на запись, содержимое файла удаляется, если файла не существует, создается новый файл 'x' открытие на запись, если файла не существует, иначе исключение 'a' открытие на дозапись, информация добавляется в конец файла 'b' открытие в двоичном режиме 't' открытие в текстовом режиме (является значением по умолчанию) '+' открытие на чтение и запись Режимы могут быть объединены, то есть, к примеру, 'rb' - чтение в двоичном режиме. По умолчанию режим равен 'rt'. И последний аргумент, encoding, нужен только в текстовом режиме чтения файла. Этот аргумент задает кодировку. 4. Запустите file_open_2.py в директории python_labs своей домашней директории. 5. Создайте файл file_write.py в директории python_labs своей домашней директории. Введите эти строки: #!/usr/bin/env python3 l = [str(i)+str(i-1) for i in range(20)] f = open('write_test.txt', 'w') for index in l: f.write(index + '\n') f.close() x = int(input("Вывести на экран?\n1 -- да\n")) if x == 1: f = open('write_test.txt') l = [line.strip() for line in f] print(l) f.close() Запись в файл осуществляется с помощью метода write. Метод write возвращает число записанных символов. После окончания работы с файлом его обязательно нужно закрыть с помощью метода close. 6. Запустите file_write.py в директории python_labs своей домашней директории. Сценарий 11: Конструкция try-except для обработки исключений Исключения (exceptions) - ещё один тип данных в python. Исключения необходимы для того, чтобы сообщать программисту об ошибках. Рассмотрим иерархию встроенных в python исключений, хотя иногда вам могут встретиться и другие, так как программисты могут создавать собственные исключения. Данный список актуален для python 3.3, в более ранних версиях есть незначительные изменения. BaseException - базовое исключение, от которого берут начало все остальные. SystemExit - исключение, порождаемое функцией sys.exit при выходе из программы. KeyboardInterrupt - порождается при прерывании программы пользователем (обычно сочетанием клавиш Ctrl+C). ArithmeticError - арифметическая ошибка. OverflowError - возникает, когда результат арифметической операции слишком велик для представления. Не появляется при обычной работе с целыми числами (так как python поддерживает длинные числа), но может возникать в некоторых других случаях. ZeroDivisionError - деление на ноль. AttributeError - объект не имеет данного атрибута (значения или метода). BufferError - операция, связанная с буфером, не может быть выполнена. EOFError - функция наткнулась на конец файла и не смогла прочитать то, что хотела. ImportError - не удалось импортирование модуля или его атрибута. MemoryError - недостаточно памяти. NameError - не найдено переменной с таким именем. UnboundLocalError - сделана ссылка на локальную переменную в функции, но переменная не определена ранее. OSError - ошибка, связанная с системой. ChildProcessError - неудача при операции с дочерним процессом. ConnectionError - базовый класс для исключений, связанных с подключениями: BrokenPipeError ConnectionAbortedError ConnectionRefusedError ConnectionResetError FileExistsError - попытка создания файла или директории, которая уже существует. FileNotFoundError - файл или директория не существует. InterruptedError - системный вызов прерван входящим сигналом. IsADirectoryError - ожидался файл, но это директория. NotADirectoryError - ожидалась директория, но это файл. PermissionError - не хватает прав доступа. ProcessLookupError - указанного процесса не существует. TimeoutError - закончилось время ожидания. RuntimeError - возникает, когда исключение не попадает ни под одну из других категорий. SyntaxError - синтаксическая ошибка. IndentationError - неправильные отступы. TabError - смешивание в отступах табуляции и пробелов. SystemError - внутренняя ошибка. TypeError - операция применена к объекту несоответствующего типа. ValueError - функция получает аргумент правильного типа, но некорректного значения. UnicodeError - ошибка, связанная с кодированием / раскодированием unicode в строках. UnicodeEncodeError - исключение, связанное с кодированием unicode. UnicodeDecodeError - исключение, связанное с декодированием unicode. UnicodeTranslateError - исключение, связанное с переводом unicode. Warning - предупреждение. 3. Теперь, зная, когда и при каких обстоятельствах могут возникнуть исключения, мы можем их обрабатывать. Для обработки исключений используется конструкция try - except. Создайте файл except_true.py в директории python_labs своей домашней директории. Введите эти строки: #!/usr/bin/env python3 def myfunc(a, b): try: return a / b except ZeroDivisionError: return str("Нельзя делить на нуль!") x = int(input("Введите коэффициент a!\n")) y = int(input("Введите коэффициент b!\n")) print (myfunc(x, y)) В блоке try мы выполняем инструкцию, которая может породить исключение, а в блоке except мы перехватываем их. При этом перехватываются как само исключение, так и его потомки. Например, перехватывая ArithmeticError, мы также перехватываем FloatingPointError, OverflowError и ZeroDivisionError. Также возможна инструкция except без аргументов, которая перехватывает вообще всё (и прерывание с клавиатуры, и системный выход и т. д.). Поэтому в такой форме инструкция except практически не используется, а используется except Exception. Однако чаще всего перехватывают исключения по одному, для упрощения отладки (вдруг вы ещё другую ошибку сделаете, а except её перехватит). 4. Запустите except_true.py в директории python_labs своей домашней директории. В качестве коэффициента b введите 0. 5. Написать программу “Электронный журнал преподавателя” под именем students_py.py. Журнал должен содержать список студентов вашей группы и бал “контрольного срока” каждого студента. Число студентов и списки задаются интерактивно при запуске приложения через стандартный ввод с консоли (в списке не менее 3-х позиций). База студентов и их контрольных сроков записывается в файл. Использовать оператор if/while, for, обработчик исключений try-except (при вводе количества студентов). При создании списков можно использовать x=int(input("Введи количество студентов\n")) name=[input("Имя:") for i in range(0,x)] ks=[int(input("КС:")) for i in range(0,x)] for i in range(0,x): base=['%s - %d' %(name[i], ks[i])] print(base)) # для отображения информации, которая будет записана в файл. Сценарий 12: Процессы 1. Создайте файл process_1.py в директории python_labs своей домашней директории. Введите эти строки: #!/usr/bin/env python3 import subprocess status = subprocess.call(["ping", "-c", "1", "8.8.8.8"]) print ("\n\n\n\nКод возврата = %d" % status) subprocess.call(args, *, stdin=None, stdout=None, stderr=None, shell=False, timeout=None) - выполняет команду, описанную args. Ожидает завершения команды, а затем возвращает код возврата. Аргументы, приведенные выше, являются лишь наиболее распространенными из них. Полная сигнатура функция в значительной степени такая же, как конструктор Popen. Аргумент timeout передается Popen.wait(). Если тайм-аут истекает, дочерний процесс будет убит, а затем будет поднято исключение TimeoutExpired. 2. Запустите process_1.py в директории python_labs своей домашней директории. Разберите и объясните логику данного скрипта. 3. Создайте файл process_2.py в директории python_labs своей домашней директории. Введите эти строки: #!/usr/bin/env python3 import subprocess status = subprocess.check_output(["ping", "-c", "1", "8.8.8.8"], universal_newlines=True) print (status) subprocess.check_output(args, *, input=None, stdin=None, stderr=None, shell=False, universal_newlines=False, timeout=None) - выполняет команду и возвращает её вывод. Поднимает исключение CalledProcessError, если код возврата ненулевой. 4. Запустите process_2.py в директории python_labs своей домашней директории. Разберите и объясните логику данного скрипта. 5. Создайте файл process_4.py в директории python_labs своей домашней директории. Введите эти строки: #!/usr/bin/env python3.4 import subprocess cmd = "ping -c 4 8.8.8.8" proc = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, universal_newlines=True) out, err = proc.communicate() print (out, err) Создание новых процессов и управление ими в данном модуле обрабатывается классом Popen. Он предлагает большую гибкость, так что разработчики могут справиться с менее распространенными случаями, не охваченными удобными функциями. subprocess.DEVNULL - значение, которое может использоваться в качестве аргумента stdin, stdout или stderr. Означает, что будет использован специальный файл devnull. subprocess.PIPE - значение, которое может использоваться в качестве аргумента stdin, stdout или stderr. Означает, что для дочернего процесса будет создан пайп. subprocess.STDOUT - значение, которое может использоваться в качестве аргумента stderr. Означает, что поток ошибок будет перенаправлен в поток вывода. Класс subprocess.Popen(args, bufsize=-1, executable=None, stdin=None, stdout=None, stderr=None, preexec_fn=None, close_fds=True, shell=False, cwd=None, env=None, universal_newlines=False, startupinfo=None, creationflags=0, restore_signals=True, start_new_session=False, pass_fds=()) - выполняет программу в новом процессе. args – строка или последовательность аргументов программы. Обычно первым указывают исполняемую программу, а затем аргументы, но также ее можно указать в параметре executable. Методы класса Popen: Popen.poll() - если процесс завершил работу - вернёт код возврата, в ином случае None. Popen.wait(timeout=None) - ожидает завершения работы процесса и возвращает код возврата. Если в течение timeout процесс не завершился, поднимется исключение TimeoutExpired (которое можно перехватить, после чего сделать ещё раз wait). Popen.communicate(input=None, timeout=None) - взаимодействовует с процессом: посылает данные, содержащиеся в input в stdin процесса, ожидает завершения работы процесса, возвращает кортеж данных потока вывода и ошибок. При этом в Popen необходимо задать значение PIPE для stdin (если вы хотите посылать в stdin), stdout, stderr (если вы хотите прочитать вывод дочернего процесса). Если в течение timeout процесс не завершился, поднимется исключение TimeoutExpired (которое можно перехватить, после чего сделать ещё раз communicate, либо убить дочерний процесс). Popen.send_signal(signal) - посылает сигнал signal. Popen.terminate() - останавливает дочерний процесс. Popen.kill() - убивает дочерний процесс. 6. Запустите process_4.py в директории python_labs своей домашней директории. Разберите и объясните логику данного скрипта. 7. Написать программу net_test_py.py порождающую дочерний процесс опроса хостов сети 192.168.2.0/24. Список доступных хостов сохранить в файл net_test. |