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