1

挣扎了两个星期。我无法解压这个 .zip。我知道这是正确的,因为我可以让它在标准命令行中工作,并且它显示了我所知道的所有内容。尝试解压缩 zip,然后重命名该文件的一部分并将其复制到另一个文件夹。这是基本设置:

import subprocess
cmd = ['7z', 'e', 'site']
sp = subprocess.Popen(cmd, stderr=subprocess.STDOUT, stdout=subprocess.PIPE)

导入后,我尝试使用以下方法解压它:

sp.communicate([cmd, 'r"C:\Users\boster\desktop\data1.zip"'])

现在它已经过了这一点,因为它移动到我的 if else 部分,但它没有解压它。我知道它将运行以下内容,因为它到达末尾并返回我的 else 语句,然后提示我再次运行数据。

if "sz + business_date" == name: 
    shutil.copy(sz%s) % business_date
    os.renames(sales.xls)
    shutil.copy(sc%s) % business_date
    os.renames(cosales.xls)
    shutil.copy(aj%s) % business_date
    os.renames(money.xls)
    shutil.copy(cc%s) % business_date
    os.renames(count.xls)
else:
    print "Repoll %s for %s" % (item, business_date)
    print "Once information is downloaded press enter."
    re_download = raw_input(" ")
    data_one()

我省略了一些像 business_date 部分这样的东西,因为它在 else 中将其作为变量返回,所以我知道它正确地获取了这些信息。我只是不知道为什么这不会解压缩。请帮忙。如果这还不够,我会上传整个模块,如果你愿意的话。

4

2 回答 2

1

我终于设法让它发挥作用。它没有在 subprocess.communicate 上解包,并且由于调用不能与 PIPE 一起使用,我只是在开始时转储了所有命令并最终得到以下结果。

def extract_data_one():
    for item in sites:
        os.chdir(r"\\svr-dc\ftp site\%s\Daily" % item)
        subprocess.call(['7z', 'e', 'data1.zip', '*.*'])

感谢你的帮助。

于 2013-08-01T15:07:25.750 回答
0

我在使用带有子进程的7zip压缩文件时遇到了类似的问题,我通过另一种方式解决了我的问题。这是我的代码,

def zip_files_in_special_path(rom_path, rom_name):
    pre_cwd = os.getcwd()
    os.chdir(rom_path)
    cmd_str = r'C:\7-Zip\7z a -tzip -r '+rom_name+' *'

    try:
        status = os.system(cmd_str)
        if status<=1:
            return True
        else:
            raise RunCmdError('run 7z to zip files failed!')
    finally:
        os.chdir(pre_cwd)

希望能帮到你。

于 2013-07-31T08:38:32.547 回答