from subprocess import Popen, PIPE
import shlex
cl = '7z x -ppassowrd Week45_10.zip'
args = shlex.split(cl)
p = Popen(args, stdin=PIPE, stdout=PIPE, stderr=PIPE)
(stdoutdata, stderrdata) = p.communicate()
START_WITH = "Extracting "
N = len(START_WITH)
lines = [line.strip() for line in stdoutdata.split('\n')]
files = [line[N:] for line in lines if line.startswith(START_WITH)]
print files
您可以捕获流程的输出。7z将把它提取的文件名打印到标准输出中。输出可能如下所示:
所以你想捕捉以“提取”开头的行。要捕获输出,您需要将进程的输出导入程序并读取它。您可以使用来自
subprocess
的communicate()
来获得完整的输出。你知道吗我对您的代码进行了一些扩展:
您应该知道,如果文件已经存在,可能会出现问题,因为
7z
将提示用户是否应该覆盖文件。如果您想处理这个问题,那么还需要控制7z
进程的输入。为此,您可能需要查看pexpect
模块。你知道吗相关问题 更多 >
编程相关推荐