Замена Performant для IPython! Magic-command magic - PullRequest
0 голосов
/ 14 декабря 2018

В Google Colab, использование:

! shell-command

является чрезвычайно запутанным

Это делает использование ! command 180 раз медленнее, чем использование system() для простой команды.

Как можно избежать использования ! command, все еще получая stdout / stderr, записанный в выходную ячейку в реальном времени?время?

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

Ответы [ 2 ]

0 голосов
/ 17 декабря 2018

Команда Python Run External и получение выходных данных на экране или в переменной дает:

import subprocess, sys

## command to run - tcp only ##
cmd = "/usr/sbin/netstat -p tcp -f inet"

## run it ##
p = subprocess.Popen(cmd, shell=True, stderr=subprocess.PIPE)

## But do not wait till netstat finish, start displaying output immediately ##
while True:
    out = p.stderr.read(1)
    if out == '' and p.poll() != None:
        break
    if out != '':
        sys.stdout.write(out)
        sys.stdout.flush()

Обратите внимание, что это не захватывает и не печатает STDERR.Редактирование приветствуется.

0 голосов
/ 14 декабря 2018

Вы можете попробовать subprocess.check_output.Он работает аналогично !, но сначала нужно разбить команду на массив.

...