Вывод хранилища подпроцесса. Popen звонят в строку

Загрузчик должен также знать местоположение файлов .twig, которые в Symfony 4 находятся в каталоге /templates. Учитывая структуру по умолчанию, это должно заставить вас работать:

  ...
  .addLoader({
    test: /\.twig$/,
    loader: 'raw-loader',
    include: [
      path.resolve(__dirname, "templates")
    ],
  },)
  ...
278
задан Community 23 May 2017 в 02:10
поделиться

7 ответов

В Python 2.7 или Python 3

Вместо того, чтобы создавать объект Popen напрямую, вы можете использовать функцию subprocess.check_output () для сохранения вывода в строке:

from subprocess import check_output
out = check_output(["ntpq", "-p"])

В Python 2.4–2.6

Используйте метод сообщения .

import subprocess
p = subprocess.Popen(["ntpq", "-p"], stdout=subprocess.PIPE)
out, err = p.communicate()

out - это то, что вам нужно.

Важное примечание о других ответах

Обратите внимание, как я передал команду. Пример "ntpq -p" поднимает другой вопрос. Поскольку Popen не вызывает оболочку, вы должны использовать список команд и параметров - ["ntpq", "-p"] .

437
ответ дан 23 November 2019 в 02:04
поделиться

Принятый ответ все еще хорош, всего несколько комментариев по более новым функциям. Начиная с python 3.6 можно обработать кодирование непосредственно в check_output, видеть документация . Это возвращает строковый объект теперь:

import subprocess 
out = subprocess.check_output(["ls", "-l"], encoding="utf-8")

В python 3.7, параметр capture_output был добавлен к subprocess.run (), который делает некоторые Popen/PIPE, обрабатывающие для нас, видит документы Python :

import subprocess 
p2 = subprocess.run(["ls", "-l"], capture_output=True, encoding="utf-8")
p2.stdout
2
ответ дан 23 November 2019 в 02:04
поделиться

Для python 3.5 я поднял функцию на основе предыдущего ответа. Журнал может быть удален, думал, что хорошо иметь

import shlex
from subprocess import check_output, CalledProcessError, STDOUT


def cmdline(command):
    log("cmdline:{}".format(command))
    cmdArr = shlex.split(command)
    try:
        output = check_output(cmdArr,  stderr=STDOUT).decode()
        log("Success:{}".format(output))
    except (CalledProcessError) as e:
        output = e.output.decode()
        log("Fail:{}".format(output))
    except (Exception) as e:
        output = str(e);
        log("Fail:{}".format(e))
    return str(output)


def log(msg):
    msg = str(msg)
    d_date = datetime.datetime.now()
    now = str(d_date.strftime("%Y-%m-%d %H:%M:%S"))
    print(now + " " + msg)
    if ("LOG_FILE" in globals()):
        with open(LOG_FILE, "a") as myfile:
            myfile.write(now + " " + msg + "\n")
0
ответ дан 23 November 2019 в 02:04
поделиться

В Python 3.7 новый аргумент ключевого слова capture_output был представлен для subprocess.run. Включение короткого и простого:

import subprocess

p = subprocess.run("echo 'hello world!'", capture_output=True)
assert str(p.stdout, 'utf8') == 'hello world!'
0
ответ дан 23 November 2019 в 02:04
поделиться
 import os   
 list = os.popen('pwd').read()

В этом случае у вас будет только один элемент в списке.

4
ответ дан 23 November 2019 в 02:04
поделиться

Это сработало для меня для перенаправления stdout (stderr может быть обработан аналогично):

from subprocess import Popen, PIPE
pipe = Popen(path, stdout=PIPE)
text = pipe.communicate()[0]

Если это не работает для вас, пожалуйста, точно укажите проблему, с которой вы столкнулись.

39
ответ дан 23 November 2019 в 02:04
поделиться

Предполагая, что pwd - это просто пример, вот как вы можете это сделать:

import subprocess

p = subprocess.Popen("pwd", stdout=subprocess.PIPE)
result = p.communicate()[0]
print result

См. документацию subprocess для другого примера и дополнительной информации.

23
ответ дан 23 November 2019 в 02:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: