2017-02-08 10 views
0

Я хочу, чтобы мой файл сценария Python, когда я «объявить» что-то пользователю, чтобы быть зеленым, как это:Создание Python текста зеленый и с помощью Spinning курсор - Новенькие вопросы

TakenfromDyMerge

Как может это было сделано? Я видел сценарий, использующий это с помощью sys.stdout.write, но я не понимаю, как его использовать, я использую простые команды «print».

Кроме того, я хотел бы, чтобы вращался курсор спиннинга до тех пор, пока эта команда работает и останавливается только тогда, когда эта команда останавливается (заканчивается):

print('running network scan') output = subprocesss.check_output('nmap -sL 192.168.1.0/24',shell=True) print('Done')

Любой способ сделать это (неизвестное время до выполнения задачи)?

Im, используя код, предложенный nos здесь: Spinning Cursor

ответ

1

Итак, о получении терминала цвета, чтобы быть зелеными, есть аккуратный пакет под названием colorama, который обычно работает отлично подходит для меня. Чтобы проверить, запущен ли процесс или нет, я бы рекомендовал использовать Popen вместо check_output, так как последнее не позволяет вам общаться с процессом, насколько я знаю. Но вам нужно, поскольку вы хотите знать, работает ли ваш подпроцесс. Вот небольшой пример кода, который должен вас запустить:

import subprocess 
import shlex 
import time 
import sys 
import colorama 

def spinning_cursor(): 

    """Spinner taken from http://stackoverflow.com/questions/4995733/how-to-create-a-spinning-command-line-cursor-using-python/4995896#4995896.""" 

    while True: 
     for cursor in '|/-\\': 
      yield cursor 

# Create spinner 
spinner = spinning_cursor() 

# Print and change color to green 
print(colorama.Fore.GREEN + 'running network scan') 

# Define command we want to run 
cmd = 'your command goes here' 

# Split args for POpen 
args=shlex.split(cmd) 

# Create subprocess 
p = subprocess.Popen(args,stdout=subprocess.PIPE) 

# Check if process is still running 
while p.poll()==None: 

    # Print spinner 
    sys.stdout.write(spinner.next()) 
    sys.stdout.flush() 
    sys.stdout.write('\b') 

print('Done') 

# Grab output 
output=p.communicate()[0] 

# Reset color (otherwise your terminal is green) 
print(colorama.Style.RESET_ALL) 
+0

Работает отлично, как я хотел .. спасибо! – eyal360