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

时间:2018-10-13 08:54:45

标签: python shell subprocess os.system

我有一个shell命令(我正在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 :(得分:1)

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

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

答案 1 :(得分:0)

您可以使用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

请注意,如果您在shell=True中使用subprocess.run(),并且filepath输入不受信任(例如,用户提供),则会遇到安全问题,即任意代码执行。 os.system()也是如此。 有关使用official documentation的可能解决方案,请参见shlex.quote()

相关问题