Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/242: Рейтинг темы: голосов - 242, средняя оценка - 4.71
0 / 0 / 0
Регистрация: 26.09.2013
Сообщений: 4

Задержка окна консоли после выполнения кода

05.10.2014, 17:11. Показов 48735. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть код, который использует модули os, subprocess, вызывает cmd и пытается авторизоваться в сетевой папке с помощью системных команд винды.
Насколько правильно все сделано - я еще не проверял, но питон скрипт завершает без ошибок.
Я этот код скомпилировал в exe.
Как заставить эту упертую как осел консоль задержаться хотя бы на 3 секунды, чтобы успеть прочитать все что выпало в результате выполнения???
Перепробовал всякие варианты. Подгружал модуль time, пробовал input(), пробовал os.system("pause") - ничего не получается.
Хотя, есть другой скрипт скомпилированный в exe...так вот в нем все с помощью input() решается.
Может дело в коде???

Во вложении код скрипта на питоне, папка с файлами скомпилированной программы, код скрипта (setup), с помощью которого компилировал код в exe

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
"""Синтаксис команды CMD: net use [driveletter:] \\ComputerName\ShareName[\volume] [password | *]
              [/USER:[domainname\]username] [/PERSISTENT:{YES | NO}]
"""
# -*- coding: utf-8 -*-
# Программа запрашивает у пользователя данные для подключения к сетевой папке и авторизуется на сервере
# при помощи модуля subprocess, который позволяет подключать в Python внешние программы для выполнения каких-либо
# команд
#
# Сначала попросим пользователя ввести данные о сервере, сетевой папке, пароле и логине пользователя:
#
import re
CN = "\\" + "\\" + input("Input name of server or it's IP adress: ") #Вводим имя или IP сервера, сохраняем его в строковом формате в переменной CN
SN = "\\" + input("Input folder name: ") #Вводим имя сетевой дирректории, сохраняем в строковом формате в переменной SN
Pass = " " + input("Input Pass: ") #Вводим пароль для входа, сохраняем в строковом формате в переменной Pass
User = " /user:" + input("Input UserName: ") #Вводим имя пользователя, сохраняем в строковом формате в переменной User
#
# После того, как все данные введены, подготовим все необходимое для выполнения команды авторизации
#
import os
Log = os.path.expanduser('~') + r"\log.txt" # Задаем переменной Log строковое значение пути к файлу лога для дальнейшей подстановки в команду. В файле лога будет
# отображаться результат выполнения команды
Redict = r" >> " # Записываем в переменную Redict спецсимвол перенаправления записи результата команды в файл - сделано для удобства
Command = "net use " + CN + SN + Pass + User + Redict + Log #Записываем системную команду Net use в переменную Command для удобного вызова в будущем,
# соединяя строки, записанные в переменных
Test = "echo test ok" + Redict + Log #Заиписываем в пееменную Test команду тестирования программы с записью результата в файл лога
print ("Inputed command = ", Command) #Выводим подготовленную системную команду на экран для наглядности
import subprocess #Загружаем модуль Subprocess, описанный в начале программы
p_1 = subprocess.Popen(Test, shell=True, stdout=subprocess.PIPE)#Сообщаем Windows команду из переменной Test с помощью подпроцесса, описанного в переменной P_1
p_1.wait()#Блокируем клавиатуру до выполнения подпроцесса переменной p_1
if p_1.poll() == 0:#Проверяем результат выполнения подпроцесса переменной p_1
    print("Test OK, process ending code is ", p_1.poll())#Если код завершения команды равен 0, значит она отработала удачно, сообщаем пользователю об этом
else:
    print("Test failed !!! , process ending code is ", p_1.poll())#Если код завершения программы не равен 0, значит, произошла ошибка, сообщаем пользователю об этом
p_2 = subprocess.Popen(Command, shell=True, stdout=subprocess.PIPE)#Сообщаем Windows команду из переменной Command с помощью подпроцесса, описанного в переменной p_2
p_2.wait()#Блокируем клавиатуру до выполнения подпроцесса переменной p_2
if p_2.poll() == 0:#Проверяем результат выполнения подпроцесса переменной p_2
    print("Main programm OK, process ending code is ", p_2.poll())#Если код завершения команды равен 0, значит она отработала удачно, сообщаем пользователю об этом
else:
    print("Main programm failed !!!, process ending code is ", p_2.poll())#Если код завершения команды не равен 0, значит, произошла ошибка, сообщаем об этом пользователю
Res = open(Log, 'r')#Открываем фай лога на чтение
print("Log file contents:\n", Res.read())#Выводим на экран все строки файла
Res.close()
from os import remove
remove(Log)
from os import system
system("pause")
Вложения
Тип файла: rar problem.rar (1.50 Мб, 8 просмотров)
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
05.10.2014, 17:11
Ответы с готовыми решениями:

Результат выполнения программы в консоли пропадает после выполнения скрипта
нужно отпарсить файл , но мне надо видеть что выводит сценарий , иначе мне его неотладить. Запускаю файл вот так python index.py

Задержать закрытие окна консоли после выполнения программы
Какой командой задержать экран C++ после выполнения программы, а то он сразу исчезает.

Задержка выполнения кода на время выполнения анимации
Пишу игру с видом пошагового боя. С каждым ходом, игрок выкладывает на доску новую фигуру. После того, как игрок выложил фигуру –...

14
8 / 8 / 0
Регистрация: 02.10.2014
Сообщений: 31
05.10.2014, 22:46
win+r -> cmd -> cd dir/with/script -> scrypt.exe
0
0 / 0 / 0
Регистрация: 26.09.2013
Сообщений: 4
06.10.2014, 19:44  [ТС]
Вставил команду в код питона, в строку №34 - добавил указанную выше команду в качестве аргумента subprocess.Popen, результат не изменился.

Если я правильно понял ex3me0 посоветовал, чтобы командная оболочка работала в той же папке, что и скрипт, но это не помогает.
0
8 / 8 / 0
Регистрация: 02.10.2014
Сообщений: 31
06.10.2014, 19:53
elfimovsy, нет, я предложил запускать ваш exe-шник не кликом мыши в проводнике, а через консоль
в таком случае вы увидите вывод Вашей программы
0
1 / 1 / 1
Регистрация: 24.11.2013
Сообщений: 59
13.10.2014, 19:57
как вариант вставте в конце скрипта функцию ввода.
Python
1
input()
0
8 / 8 / 0
Регистрация: 02.10.2014
Сообщений: 31
13.10.2014, 20:09
Punk_Joker, пробовали уже
в первом посте:
пробовал input(),
0
 Аватар для Zuzik
298 / 256 / 57
Регистрация: 11.06.2012
Сообщений: 1,557
13.10.2014, 20:31
у самого была аналогичная проблема. Проблему решил, но увы решения не осталось. Возможно помогло использование raw_input() во втором питоне, и еще как вариант - попробуй другую программу для преобразования в exe.
0
 Аватар для sanodins
52 / 51 / 15
Регистрация: 27.06.2013
Сообщений: 192
Записей в блоге: 1
13.10.2014, 22:07
Bash
1
nu.py  >out.txt
0
45 / 39 / 24
Регистрация: 29.11.2013
Сообщений: 145
13.10.2014, 22:20
Наверно решение от ex3me0 самое правильное. Но предложу такой вариант с input()

Python
1
2
3
4
5
6
7
8
9
10
11
...
print("Log file contents:\n", Res.read())#Выводим на экран все строки файла
Res.close()
 
end_read_out = ''
while end_read_out != '.': # Вводим точку для продолжения
    end_read_out = input()
 
from os import remove
remove(Log)
...
0
1 / 1 / 0
Регистрация: 05.08.2016
Сообщений: 1
05.08.2016, 10:46
Пример того когда комментарии к коду скорее вредны чем полезны

print('Hello Ворлд') '''Здесь мы используем встроенную функцию для вывода сообщения на экран. Сообщение заключено в одинарные кавычки и состоит из двух слов. Нужно написать еще что-то потому что я люблю писать бесполезные комментарии'''

Добавлено через 12 минут
Юному программеру на заметку (на любом языке):

1. Комментарии должны быть лаконичны и обезличены (без "мы, нас, ему, нам" и т.п.);
2. Если нужно добавить блок с описанием какого то внешнего инструмента - то добавлять его нужно в конец листинга;
3. Комменты пишутся или ДО блока с кодом или ПОСЛЕ. Писать комменты справа (особенно длинные) - плохая привычка;
4. Переменные должны называться ОСМЫСЛЕННО и ПОНЯТНО, а не CN и SN,
например: server_name, net_folder, user_name, user_pass и т.п.

Всё это ОБЯЗАТЕЛЬНО нужно соблюдать чтобы следовать давно сформированным
правилам оформления кода. Вам самим будет его легче читать и другим кто будет с ним работать.
По тому как оформлен код можно сделать вывод о том как разработчик относится к работе в целом

И само собой не должно быть никаких ошибок и всяких жаргонных словечек типо "винда, тут мы кодим, консолька, юзверь и т.п.". Термины должны быть строго технические и общепринятые.


---
Если не требуется обработка нажатия клавиш, то самое простое решение:

Python
1
2
3
4
import time
delay = 5            #время задержки в секундах;
# какой-то код;
time.sleep(delay)
Использовать input() - плохое решение, т.к. оно подразумевает что пользователь нажмет Enter.
Но если он нажмет что-то другое, то это что-то другое будет выводится на экран.
1
Эксперт Python
 Аватар для dondublon
4653 / 2073 / 366
Регистрация: 17.03.2012
Сообщений: 10,183
Записей в блоге: 6
05.08.2016, 14:49
Если input в конце не работает - возможно, до конца скрипта просто происходит ошибка.
Чтобы посмотреть вывод, можно сделать вывод в файл:
Code
1
myscript.exe > out.txt
Добавлено через 1 минуту
А, ещё вариант - запускать через FAR ^)
0
440 / 432 / 159
Регистрация: 21.05.2016
Сообщений: 1,338
06.08.2016, 00:30
Раскопали обсуждение 2014 года, молодцы
0
0 / 0 / 0
Регистрация: 03.08.2016
Сообщений: 6
16.08.2016, 12:48
Использовать input() - плохое решение, т.к. оно подразумевает что пользователь нажмет Enter.
Но если он нажмет что-то другое, то это что-то другое будет выводится на экран.
Вот, кстати, да. А есть ли на питоне какой-нибудь аналог ReadKey() или getch(), чтобы просто ждал нажатия любой клавиши без enter? Конечно же есть msvcrt и readchar, но ставить доп. модуль только ради нажатия клавиши, как-то не очень красиво. Если только для себя, то ладно, ну а если кому-то другому срипт пишешь?
0
Эксперт Python
 Аватар для dondublon
4653 / 2073 / 366
Регистрация: 17.03.2012
Сообщений: 10,183
Записей в блоге: 6
16.08.2016, 14:28
Sidorov, нету. Тут уже где-то это обсуждалось. Этим занимается не питон, а программа-терминал. cmd.exe или что-то аналогичное.
0
0 / 0 / 0
Регистрация: 03.08.2016
Сообщений: 6
16.08.2016, 17:58
dondublon, Кстати, не всегда, но довольно часто бывает, что и far запускает скрипт в отдельном окне, если панели скрыть (по Ctrl-O), то только тогда гарантированно в самом far'е отработает.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
16.08.2016, 17:58
Помогаю со студенческими работами здесь

Задержка выполнения кода
Всем привет! Обучаюсь понемногу С# и пишу программу для управления устройством по COM-порту. Необходимо устройству подавать...

Задержка выполнения кода в скрипте
как между setActive false и true сделать задержку в 1 секунду? using UnityEngine; using UnityEngine.UI; using System.Collections; ...

Задержка выполнения кода в Unity
Подскажите пожалуйста, каким образом можно реализовать задержку выполнения кода. У меня есть скрипт, который перемещает объект постоянно...

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

Задержка выполнения кода на несколько секунд
Здравствуйте. Как прервать выполнение кода на некоторое количество секунд? Ну например, вводит пользователь а и в, жмет кнопку, а...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru