Получить вывод сценария оболочки и сохранить в переменную - PullRequest
0 голосов
/ 13 октября 2018

У меня есть команда оболочки (я запускаю ее на python), и я хочу получить ее вывод и сохранить ее в переменной.Не могли бы вы, ребята, помочь мне с тем, как это можно сделать?

Это мой код Python ...

os.system("unzip -p'" +filepath+"' docProps/app.xml | grep -oP '(?<=\<Pages\>).*(?=\</Pages\>)'"

Кстати, он получает число страниц / сфайла DOCX.Это работает, но, как я уже сказал, я не знаю, как сохранить его в переменной.

Когда я делаю это:

page_number = os.system("unzip -p'" +filepath+"' docProps/app.xml | grep -oP '(?<=\<Pages\>).*(?=\</Pages\>)'"

Не возвращается правильное значение.

Заранее большое спасибо.Я пытался преобразовать это в sub -process.call, но я также не знаю как, потому что я новичок.Еще раз спасибо!

Ответы [ 2 ]

0 голосов
/ 13 октября 2018

вы можете использовать подпроцесс для получения вывода

import subprocess
s=subprocess.Popen("unzip -p'{0}' docProps/app.xml | grep -oP '(?<=\<Pages\>).*(?=\</Pages\>)'".format(filepath),shell=True,stdout=subprocess.PIPE,stderr=subprocess.STDOUT)
for line in s.stdout.readlines():
  print line
s.kill()
0 голосов
/ 13 октября 2018

Вы можете сделать это с помощью модуля subprocess в стандартной библиотеке Python.

import subprocess

command = "unzip -p'" +filepath+"' docProps/app.xml | grep -oP '(?<=\<Pages\>).*(?=\</Pages\>)'"
completed_process = subprocess.run(command, shell=True, text=True, capture_output=True)
output = completed_process.stdout

Обратите внимание, что если вы используете shell=True в subprocess.run() и filepath ввод не является доверенным (например, предоставлен пользователем), у вас есть проблемы с безопасностью, т. Е. Выполнение произвольного кода.То же самое касается os.system().См. официальную документацию для возможного решения, используя shlex.quote().

...