如何在Python 2.x中的嵌套函数中访问此非全局变量?

时间:2016-03-18 14:47:40

标签: python python-2.7

我一直在努力寻找解决方案并查看了herehere

这是我的代码:

def sshRunCommand(self, command, print_stdout=True, print_stderr=True):

    def run_exec_command_thread(command):
        (stdin, stdout, stderr) = self.client.exec_command(command)

    # Appends command to always change to the home directory first
    x = "cd /home/" + self.username + "/; " + command

    # Locally output an terminal-esque command look-a-like
    if print_stdout:
        print self.username + "@" + self.payloadd + ":" + x

        exec_command_thread = Thread(
            target=run_exec_command_thread,
            args=(x,))
        exec_command_thread.daemon = True
        exec_command_thread.start()

        while exec_command_thread.isAlive():
            a = stdout.readlines()
            for b in a:
                print b

我想制作stdinstdout和&嵌套函数stderr中的run_exec_command_thread将与其父函数共享。我正在使用Python 2.7,因此我无法使用nonlocal。我不知道如何在这种特定情况下共享它们之间的变量,因为在这种情况下我不知道如何实现dict解决方案,因为对象类型是paramiko.channel.ChannelFile。我希望有人能让我朝着正确的方向前进。

1 个答案:

答案 0 :(得分:0)

这与嵌套函数无关。

在运行该函数之前,似乎不会创建stdin等,即在新的Thread中。

这意味着它应该可以使用跨线程方法的标准变量共享来解决,例如:使用Queue - 请参阅此处:How to share a variable between 2 threads