Загрузчик должен также знать местоположение файлов .twig
, которые в Symfony 4 находятся в каталоге /templates
. Учитывая структуру по умолчанию, это должно заставить вас работать:
...
.addLoader({
test: /\.twig$/,
loader: 'raw-loader',
include: [
path.resolve(__dirname, "templates")
],
},)
...
В 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"]
.
Принятый ответ все еще хорош, всего несколько комментариев по более новым функциям. Начиная с 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
Для 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")
В 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!'
import os
list = os.popen('pwd').read()
В этом случае у вас будет только один элемент в списке.
Это сработало для меня для перенаправления stdout (stderr может быть обработан аналогично):
from subprocess import Popen, PIPE
pipe = Popen(path, stdout=PIPE)
text = pipe.communicate()[0]
Если это не работает для вас, пожалуйста, точно укажите проблему, с которой вы столкнулись.
Предполагая, что pwd
- это просто пример, вот как вы можете это сделать:
import subprocess
p = subprocess.Popen("pwd", stdout=subprocess.PIPE)
result = p.communicate()[0]
print result
См. документацию subprocess для другого примера и дополнительной информации.