Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 1, 2014 21:00:44

missial
Зарегистрирован: 2013-10-14
Сообщения: 27
Репутация: +  0  -
Профиль   Отправить e-mail  

Пинг subprocess

import subprocess
address = 'ya.ru'
result=subprocess.call(["ping",'-n','1', str(address)],shell=True,stdout=subprocess.PIPE)
print (result)
Имеется данный код
Как мне вывести результат команды ping, как если бы он выводился, когда я пишу ping ya.ru в консоли windows?
Объясните пожалуйста, что значит ‘-n’ и ‘1’ в строке кода?
Что такое stdout?

Офлайн

#2 Янв. 1, 2014 21:29:46

Singularity
Зарегистрирован: 2011-07-28
Сообщения: 1387
Репутация: +  75  -
Профиль   Отправить e-mail  

Пинг subprocess

missial

>ping -n 1 ya.ru
connect: Invalid argument

Офлайн

#3 Янв. 2, 2014 00:41:11

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

Пинг subprocess

Singularity
Ты нпверное еще не проснулся/отошел от праздника - речь же идет о винде, а не о никсах :)

missial
Как мне вывести результат команды ping, как если бы он выводился, когда я пишу ping ya.ru в консоли windows?
print result.stdout.read()

missial
Объясните пожалуйста, что значит ‘-n’ и ‘1’ в строке кода?
сделать 1 запрос операции Ping

missial
Что такое stdout?
Снатдартный поток вывода.

НА первый вопрос все отлично ищется в интернете, на первой же странице гугла/яедекса
На второй вопрос даже не нужен интернет - ввели в консоли
ping /?
На третий вопрос достаточно ввести в гугл “Что такое stdout” и он тут же выдаст готовый ответ из Википедии.

Теперь мой вопрос вам - что из всего этого было сложного? ЧТо вы как человек разумный не смогли осилить?



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#4 Янв. 2, 2014 01:00:38

Budulianin
От:
Зарегистрирован: 2011-10-18
Сообщения: 1218
Репутация: +  33  -
Профиль   Отправить e-mail  

Пинг subprocess

Singularity

“Исчерпывающий” ответ.

missial
Как мне вывести результат команды ping, как если бы он выводился, когда я пишу ping ya.ru в консоли windows?

Функция call предназначена для запуска команд, если тебе нужно перехватить вывод команды, то используй subprocess.Popen

missial
Объясните пожалуйста, что значит ‘-n’ и ‘1’ в строке кода?
Syntax
ping [-t] [-a] [-n Count]  [TargetName]
-n Count : Specifies the number of Echo Request messages sent. The default is 4.
missial
Что такое stdout?
при помощи параметра stdout можно перенаправить поток вывода запускаемой команды, например подавить его(вариант для Linux): stdout=open('/dev/null', w)

Прочитай в документации
Так же более доступный вариант информации есть в книге “Python в системном администрировании UNIX и Linux” от Ноа Гифт и Джереми М.Джонс





Отредактировано Budulianin (Янв. 2, 2014 01:06:18)

Офлайн

#5 Янв. 2, 2014 01:10:39

Budulianin
От:
Зарегистрирован: 2011-10-18
Сообщения: 1218
Репутация: +  33  -
Профиль   Отправить e-mail  

Пинг subprocess

JOHN_16
print result.stdout.read()

JOHN_16
Ты нпверное еще не проснулся/отошел от праздника - речь же идет о винде, а не о никсах :)

А ты проснулся?)

В result будет число



Офлайн

#6 Янв. 2, 2014 04:05:03

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

Пинг subprocess

Budulianin
проснулся) но я болею=) не углядел что там call). Что call что Popen предназначены для запуска команд, call это всего лишь короткий вызов

def call(*popenargs, **kwargs):
    """Run command with arguments.  Wait for command to complete, then
    return the returncode attribute.
    The arguments are the same as for the Popen constructor.  Example:
    retcode = call(["ls", "-l"])
    """
    return Popen(*popenargs, **kwargs).wait()



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#7 Янв. 2, 2014 11:16:15

missial
Зарегистрирован: 2013-10-14
Сообщения: 27
Репутация: +  0  -
Профиль   Отправить e-mail  

Пинг subprocess

result=subprocess.call(["ping",'-n','1', str(address)],shell=True,stdout=subprocess.PIPE)
print (result.stdout.read())
Такой код выдает ошибку:
print (result.stdout.read())
AttributeError: ‘int’ object has no attribute ‘stdout’


Если меняем
subprocess.call
на
subprocess.Popen
То получаем правильный вывод, вида b'\r\n\x8e\xa1\xac\xa5\xad
Только тут уж очевидная проблема с кодировкой..

Офлайн

#8 Янв. 2, 2014 11:32:45

missial
Зарегистрирован: 2013-10-14
Сообщения: 27
Репутация: +  0  -
Профиль   Отправить e-mail  

Пинг subprocess

Вот и решение с кодировкой

print (result.stdout.read().decode('cp866'))

Офлайн

#9 Янв. 2, 2014 11:37:18

missial
Зарегистрирован: 2013-10-14
Сообщения: 27
Репутация: +  0  -
Профиль   Отправить e-mail  

Пинг subprocess

А вообще хочу написать утилиту, которая бы постоянно выводила средний пинг.
Даже план есть небольшой:
1. Отображать средний пинг .
2. Научиться отображать всё это в GUI
3. Сделать постоянyое отображение в трее windows

Офлайн

#10 Янв. 2, 2014 15:11:15

Budulianin
От:
Зарегистрирован: 2011-10-18
Сообщения: 1218
Репутация: +  33  -
Профиль   Отправить e-mail  

Пинг subprocess

JOHN_16
Что call что Popen предназначены для запуска команд, call это всего лишь короткий вызов

call предназначен только для запуска команд и получения кода возврата, Popen для запуска команд и перехвата их вывода.



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version