7z将无法使用子进程找到存档

时间:2013-07-30 20:18:50

标签: python 7zip

苦苦挣扎了两个星期。我无法得到这个.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中的变量返回,所以我知道它正确地抓取了这些信息。我只是不知道为什么这不会解包。请帮忙。如果这还不够,我会根据你的意愿上传整个模块。

2 个答案:

答案 0 :(得分: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', '*.*'])

感谢您的帮助。

答案 1 :(得分: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)
希望能帮到你。