0

我有这样的功能:

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
4

2 回答 2

1

您可以简单地返回一个元组:

return items[4], items[1], items[2]

这将导致分配给ab并且c您需要。

于 2013-07-03T09:40:45.573 回答
0

您可能认为在您生成对象后函数会中断。它没有。因此 for 循环将继续,可能会产生更多值。

您可以return在 yield 语句之后放置 a 以便函数中断,或者甚至只是通过执行一次在一个元组中返回所有三个值return (items[4], items[1], items[2])

于 2013-07-03T09:40:15.827 回答