Python可以用Popen一起走循环吗?

Can you use Popen and walk together in a loop in Python?

我正在尝试使用可执行文件压缩器 (7-Zip) 压缩目录及其子目录中的文件。我已经设置了一个循环来自动执行该过程,并且代码不会产生任何错误。但是,它似乎没有压缩任何东西。我写的是:

import subprocess, os

path = 'directory-path'
newpath = 'new-directory-path'

for dirpath, dirnames, files in os.walk(path):
    for filename in files:
        p = subprocess.Popen(['C:\Program Files (x86)\7-Zip\7z.exe', 'a', '-mx1', 'blahblah', filename], cwd = newpath)
        p.wait()

确实在newpath目录下输出了一个文件blahblah.dat,但是1KB的文件,应该是几GB。当然,当我在循环外的文件路径中进行硬编码时,它工作得很好。我在这里做错了什么?

当您将文件传递给 7z.exe 时,您没有提供文件的目录名称,因此它会在当前目录中查找文件。使用 os.path.join() 将目录与文件名合并。

p = subprocess.call(['C:\Program Files (x86)\7-Zip\7z.exe', 'a', '-mx1', 'blahblah', os.path.join(dirpath, filename)], cwd = newpath)