Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 19, 2015 11:47:08

Vic45rus
Зарегистрирован: 2015-04-19
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Python + cmd

Общаюсь в питоне с командной строкой в одностороннем порядке
Суть в том, что есть некоторый цикл, в котором содержится следующий код:

            os.system('команда')
Однако у такого способа есть недостатки
Т.к. находится эта часть кода в цикле, то каждый раз при выполнении цикла запускается новая командная строка, всё бы ничего, однако каждый раз при запуске командной строки основное приложение делается неактивным и сворачивается, а выполнение Python скрипта приостанавливается до тех пор, пока не закроется командная строка.
Уважаемые знатоки, теперь вопросы:
1.Как сделать, чтобы командная строка не сворачивала основное приложение, а питон не дожидался её завершения?
2.Как сделать, чтобы запускалась только одна командная строка в фоне, а ей уже каждый цикл посылались команды?
Заранее спасибо за любую помощь!

Офлайн

#2 Апрель 19, 2015 11:59:16

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10015
Репутация: +  857  -
Профиль   Отправить e-mail  

Python + cmd

Попробуй subprocess.Popen() .



Офлайн

#3 Апрель 19, 2015 12:14:15

Vic45rus
Зарегистрирован: 2015-04-19
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Python + cmd

Ругается аж на две строки

Lib/subprocess.py", line 679, in __init__
Lib/subprocess.py", line 896, in _execute_child
Есть ещё варианты?

Офлайн

#4 Апрель 19, 2015 12:18:25

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10015
Репутация: +  857  -
Профиль   Отправить e-mail  

Python + cmd

Vic45rus
Есть ещё варианты?
Сначала прочитай, как там программы запускать.



Офлайн

#5 Апрель 19, 2015 12:34:35

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

Python + cmd

Vic45rus
Python скрипта приостанавливается до тех пор, пока не закроется командная строка
1 То что вы хотите сделать называется асинхронное выполнение. Если программа которую вы запускаете не предназначена для этого, то все равно не очень хорошо получится.

Чтобы посылать данные непрерывно вам надо запихивать ей команды во входной поток. Но не существует общепринятого способа объяснить что кончилась одна команда и началась другая. Поэтому до вашей программы данные дойдут одним куском, когда вы напихаете несколько килобайт команд.
И выглядеть это будет так, что программа начала выполняться только когда вы закроете ее stdin (при этом буфер опустошится наконец ей на вход).
Тогда уж лучше использовать communicate
https://docs.python.org/2/library/subprocess.html

2
Vic45rus
Есть ещё варианты?
Других вариантов нет. Если вы subprocess не сможете использовать, то вам вообще не стоит заниматься программированием на питоне.



Офлайн

#6 Апрель 19, 2015 13:02:58

Vic45rus
Зарегистрирован: 2015-04-19
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Python + cmd

Вроде всё правильно написал, а выполняться она не хочет. Ошибок тоже не выдаёт. Окошка cmd нет.

cmd = """shutdown /s /t 0"""
proc = Popen(
    cmd,
    shell=True
)
Что я сделал не так?
doza_and
не стоит заниматься программированием на питоне.
С os.system всё несколько проще, а вот нормальное описание некоторых модулей для python в google на русском и днём с огнём не сыщешь

Офлайн

#7 Апрель 19, 2015 13:34:15

sander
Зарегистрирован: 2015-02-19
Сообщения: 317
Репутация: +  53  -
Профиль   Отправить e-mail  

Python + cmd

Vic45rus

Vic45rus
а вот нормальное описание некоторых модулей для python в google на русском и днём с огнём не сыщешь
а вот это вранье

Офлайн

#8 Апрель 19, 2015 13:52:01

Vic45rus
Зарегистрирован: 2015-04-19
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Python + cmd

sander
Может не будете флудить, а предложите что-нибудь полезное?
Например ссылку на полное и понятное для новичка описание на русском того, как работает subprocess?
А то создаётся впечатление, что опытные носители языка явно недружелюбны к новичкам.

Офлайн

#9 Апрель 19, 2015 13:54:37

4kpt_III
Зарегистрирован: 2014-12-22
Сообщения: 999
Репутация: +  39  -
Профиль   Отправить e-mail  

Python + cmd

Просто новички делают громогласные заявления, которые несовместимы с их статусом Поэтому и такая реакция.

Для примера. Вот блог мной очень уважаемого человека.
Переходим и читаем

Офлайн

#10 Апрель 19, 2015 14:51:53

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10015
Репутация: +  857  -
Профиль   Отправить e-mail  

Python + cmd

Vic45rus
а вот нормальное описание некоторых модулей для python в google на русском и днём с огнём не сыщешь
import subprocess
help(subprocess)
Там примеры.

Читай основную документацию.

Vic45rus
С os.system всё несколько проще
os.system() не даёт прочитать/проанализировать вывод, просто в консоль выводит.

Vic45rus
Окошка cmd нет.
Оно не всегда бывает, фоновый процесс на то и фоновый.



Отредактировано py.user.next (Апрель 19, 2015 14:53:13)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version