如何修改此函数以接受三个不同变量的返回?

时间:2013-07-03 09:36:55

标签: python subprocess yield

我有这样的功能:

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

2 个答案:

答案 0 :(得分:1)

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

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

这将导致您需要的abc作业。

答案 1 :(得分:0)

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

您可以在yield语句之后放置一个return,这样函数就会中断,或者甚至只需通过return (items[4], items[1], items[2])

在元组中一次性返回所有三个值