Найти - Пользователи
Полная версия: Пинг subprocess
Начало » Python для новичков » Пинг subprocess
1 2
sanodin
cmd = 'ping google.com'
import subprocess
PIPE = subprocess.PIPE
p = subprocess.Popen(cmd, shell=True, stdin=PIPE, stdout=PIPE,
        stderr=subprocess.STDOUT)
while True:
    s = p.stdout.readline()
    if not s: break
    print s.decode('cp866'),
sanodin
missial
А вообще хочу написать утилиту, которая бы постоянно выводила средний пинг.Даже план есть небольшой:1. Отображать средний пинг .2. Научиться отображать всё это в GUI3. Сделать постоянyое отображение в трее windows
import sys, os
from PyQt4 import QtCore
from PyQt4.QtCore import SIGNAL
from PyQt4.QtGui import QApplication
from PyQt4.QtGui import QIcon
from PyQt4.QtGui import QMenu
from PyQt4.QtGui import QAction
from PyQt4.QtGui import QSystemTrayIcon
from PyQt4.QtCore import QString
from PyQt4.QtCore import SLOT
from PyQt4.QtCore import QTimer
import subprocess
if __name__ == "__main__":
    dummy_parent = QtCore.QObject()
    app = QApplication(sys.argv)
    plik = QString("/usr/share/icons/crystalsvg/16x16/apps/wine.png")
    menu = QMenu()
    quitAction = menu.addAction('Quit')
    sicon = QIcon(plik)
    tray = QSystemTrayIcon(sicon, parent=dummy_parent)
    tray.setContextMenu(menu)
    tray.show()
    quitAction.connect(quitAction, SIGNAL("triggered()"), app, SLOT("quit()"))
    tray.setToolTip("Ale czad!")
    def show_message():
        cmd = 'ping google.com -n 1000'
        
        PIPE = subprocess.PIPE
        p = subprocess.Popen(cmd, shell=True, stdin=PIPE, stdout=PIPE,
                stderr=subprocess.STDOUT)
        while True:
            s = p.stdout.readline()
            if not s: break
            
            tray.showMessage("google.com", s.decode('cp866'))
    QTimer.singleShot(2000, show_message)
    
    sys.exit(app.exec_())
    
для примера
4kpt_II
Я в Qt не работаю, но…

from PyQt4 import QtCore
from PyQt4.QtCore import SIGNAL
from PyQt4.QtGui import QApplication
from PyQt4.QtGui import QIcon
from PyQt4.QtGui import QMenu
from PyQt4.QtGui import QAction
from PyQt4.QtGui import QSystemTrayIcon
from PyQt4.QtCore import QString
from PyQt4.QtCore import SLOT
from PyQt4.QtCore import QTimer

Это нормально?
sanodin
так ?
import sys, os
from PyQt4 import QtCore
from PyQt4.QtGui import QAction,QSystemTrayIcon,QMenu,QIcon,QApplication
from PyQt4.QtCore import SLOT,QTimer,QString,SIGNAL
import subprocess
копипаст, не исправляется…)
вообще наверное пример неудачный…
текстовый виджет в трее хотел ТС а не всплывающее сообщение в трее
Budulianin
sanodin
так ?

Нет, не так.

Imports should usually be on separate lines, e.g.:
Yes: import os
     import sys
No:  import sys, os
It's okay to say this though:
from subprocess import Popen, PIPE

PEP 8
sanodin
sanodin
import sys, os
да, пропустил здесь, невнимательность граничащая с “побыстрей отделаться”
missial
import subprocess
address = 'ya.ru'
while True:
    result=subprocess.Popen(["ping",'-n','1', str(address)],shell=True,stdout=subprocess.PIPE)
    ping = (result.stdout.read().decode('cp866'))
    m = ping.split()
    if len(m) != 48:
        print('0')
    else:
        print (m[46])
Написал я этот вывод. Реализован наверно очень страшно, но всё впереди)
Осталось еще всё вывести в GUI через tkinter, а потом попробую вывести в трее windows.
Подскажите, как мне все завернуть в функцию, чтоб при её вызове я получал значения
m[46]
?
missial
Разобрался)
from tkinter import *
import subprocess
root=Tk()
variable=StringVar()
def ping():
    address = 'ya.ru'
    while True:
        result=subprocess.Popen(["ping",'-n','1', str(address)],shell=True,stdout=subprocess.PIPE)
        ping = (result.stdout.read().decode('cp866'))
        m = ping.split()
        if len(m) != 48:
            b = '0'
        else:
            b = m[46]
        variable.set(str(b))
        root.update()
your_label=Label(root,textvariable=variable)
your_label.pack()
start_button=Button(root,text="start",command=ping)
start_button.pack()
root.mainloop()
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