获取 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()
我有一个 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()