我有这样的功能:
import os
import subprocess
def find_remote_files(hostspec):
cmdline = ["rsync", "-e", "ssh", "-r", hostspec]
with open(os.devnull, "w") as devnull:
proc = subprocess.Popen(cmdline, stdout=subprocess.PIPE, stderr=devnull)
try:
for entry in proc.stdout:
items = entry.strip().split(None, 4)
if not items[0].startswith("d"):
yield items[4]
yield items[1]
yield items[2]
proc.wait()
except:
# On any exception, terminate process and re-raise exception.
proc.terminate()
proc.wait()
raise
这个函数返回三个不同的东西,我想把它存储在三个不同的变量中:
a, b, c = find_remote_date('username', 'password')
# a should hold yield items[4]
# b should hold yield items[1]
# c should yield items[2]
我尝试这样做时出现以下错误:
ValueError: too many values to unpack
答案 0 :(得分:1)
你可以简单地返回一个元组:
return items[4], items[1], items[2]
这将导致您需要的a
,b
和c
作业。
答案 1 :(得分:0)
您可能认为在生成对象后函数会中断。它没有。因此for循环将继续,可能会产生更多的值。
您可以在yield语句之后放置一个return
,这样函数就会中断,或者甚至只需通过return (items[4], items[1], items[2])