2016-05-05 6 views
0

в Python 2.7, я пытаюсь:Python подпроцессов для запуска эхо и оставить окно открытым

  1. Ping IP-адреса с помощью команды подпроцесса без отображения окна консоли.
  2. Если команда пинг subproccess возвращает ничего, кроме 0, предупреждая пользователя о том, что пинг не удалось
  3. оповещения пользователя с помощью эхо-команды через subproccess

шаги 1 и 2 сделаны. У меня проблемы с шагом 3. Если есть лучший способ сделать это, чем то, что я пытаюсь сделать, я открыт для предложений. Мне просто нужен быстрый и простой способ отображения короткого предупреждения пользователю.

Большая проблема с шагом 3 - это окно консоли, но оно исчезает очень быстро. В идеале я бы хотел оставить окно открытым до тех пор, пока не будет получена некоторая обратная связь с пользователем, но в этот момент я тоже воспользуюсь таймаутом.

Вот что у меня есть:

subprocess.call(['echo', 'One or more of the IPs failed to respond to their ping. Check Logs', ' & pause'])

Конечный результат я ищу это пользователь собирается о своей повседневной деятельности на ПК, всплывающее окно происходит, что говорит им запланированную попытку пинг не достиг своего пункта назначения, пользователь обеспечивает обратную связь, чтобы закрыть всплывающее окно.

+1

не связаны: вы можете использовать окно GUI для отображения предупреждения, например, 'tkMessageBox.showwarning()' вместо запуска 'echo' команды в новой консоли Windows. – jfs

+0

Я сделал несколько быстрых исследований и увидел, что это вариант, но я думал, что просто отправить команду эха будет легко и быстро, так как я уже узнал, как использовать команду subprocess. Но, возможно, это было не так просто! Мне нужно будет изучить, что в следующий раз мне нужно окно – Rdemps

+1

Если вы не знаете, как использовать 'tkMessageBox.showwarning()'; просто спросите (как отдельный вопрос). Я бы попробовал 'import tkMessageBox; tkMessageBox.showwarning ('title', 'text') 'и убедитесь, что он не работает для вас. – jfs

ответ

1

В СРЕДЕ WINDOWS:

def cmdMessage(message): 
    subprocess.call('cmd /K "echo ' + message + '"') 

cmdMessage('One or more of the IPs failed to respond to their ping. Check Logs') 
+0

Это предполагает среду Windows. –

+0

Он делает:/Я добавлю его к своему ответу –

+0

Это работает отлично. Я экспериментировал с параметром cmd/K, но не смог найти рабочую комбинацию. Это имеет смысл. Спасибо! – Rdemps

0
subprocess.call(['echo', 'One or more of the IPs failed to respond to their ping. Check Logs', ' & pause']) 

& pause часть не будет работать, потому что это то, что ваша оболочка (будь то Bash, Tcsh, что угодно) толкует. Это буквально отправило бы «& pause» в качестве второго аргумента в команду echo.

Просто из любопытства, почему бы вам просто не напечатать свои отзывы в Python?

print "One or more of the IPs failed to respond to their ping. Check logs." 

Если вы хотите сделать паузу, вы можете использовать time.sleep из time модуля. Если вы хотите, чтобы ждать ввода использования, вы можете сделать это с raw_input:

print "One or more of the IPs failed to respond to their ping. Check logs. Hit enter to continue." 
raw_input() 
+0

Он хочет, чтобы он всплыл в окно, так что пользователь заметит, поэтому печать не поможет –

+0

У меня было ощущение, что «& pause» просто эхом отозвался, и это было неправильно, но я не мог этого видеть! : p Ni будет правильным.Дело в том, что все работает правильно. Пользователь не должен знать ничего, что даже случилось. Я собираюсь запланировать это каждое утро, чтобы проверить на некоторых компьютерах, но я не очень-то забочусь о результатах, если они все в сети. – Rdemps

+1

Проблема, вероятно, заключается не в отдельных аргументах (в Windows, они должны получить smooshed обратно вместе в одну строку), но только тот факт, что 'echo' является командной оболочкой, а не исполняемым. –

Смежные вопросы