获取 shell 脚本的输出并存储到变量

Get output of shell script and store to variable

我有一个 shell 命令(我在 python 上 运行 它)我想得到它的输出并将它存储在一个变量中。你们能帮我看看怎么做吗?

这是我的 python 代码...

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

顺便说一下,它的作用是获取 docx 文件的 page/s 的数量。它正在工作,但正如我所说,我不知道如何将它存储在变量中。

当我这样做时:

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

return 值不正确。

在此先感谢您。我尝试将其转换为 sub-process.call 但我也不知道怎么做,因为我是初学者。再次感谢!

您可以使用 Python 标准库中的 subprocess 模块执行此操作。

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

请注意,如果您在 subprocess.run() 中使用 shell=True 并且 filepath 输入不受信任(例如用户提供),则您会遇到安全问题,即任意代码执行。 os.system() 也是如此。 见 official documentation for a possible solution using shlex.quote().

您可以使用子流程来获取输出

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()