Найти - Пользователи
Полная версия: Пинг subprocess
Начало » Python для новичков » Пинг subprocess
1 2
missial
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?
Singularity
missial
>ping -n 1 ya.ru
connect: Invalid argument
JOHN_16
Singularity
Ты нпверное еще не проснулся/отошел от праздника - речь же идет о винде, а не о никсах :)

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

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

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

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

Теперь мой вопрос вам - что из всего этого было сложного? ЧТо вы как человек разумный не смогли осилить?
Budulianin
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
JOHN_16
print result.stdout.read()

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

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

В result будет число
JOHN_16
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()
missial
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
Только тут уж очевидная проблема с кодировкой..
missial
Вот и решение с кодировкой
print (result.stdout.read().decode('cp866'))
missial
А вообще хочу написать утилиту, которая бы постоянно выводила средний пинг.
Даже план есть небольшой:
1. Отображать средний пинг .
2. Научиться отображать всё это в GUI
3. Сделать постоянyое отображение в трее windows
Budulianin
JOHN_16
Что call что Popen предназначены для запуска команд, call это всего лишь короткий вызов

call предназначен только для запуска команд и получения кода возврата, Popen для запуска команд и перехвата их вывода.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB