我可以通过Python中的eventlet.backdoor调用函数或更改变量吗?

我可以通过Python中的eventlet.backdoor调用函数或更改变量吗?,python,eventlet,Python,Eventlet,我编写了以下代码来解释我的案例: import threading import time import eventlet from eventlet import backdoor eventlet.monkey_patch() global should_printing should_printing = True def turn_off_printing(): global should_printing should_printing = not should_

我编写了以下代码来解释我的案例:

import threading
import time
import eventlet
from eventlet import backdoor

eventlet.monkey_patch()

global should_printing
should_printing = True

def turn_off_printing():
    global should_printing
    should_printing = not should_printing

def printing_function():
    global should_printing
    while should_printing == True:
        print "printing"
        time.sleep(1)

def console():
    while True:
        print "inside console"
        time.sleep(1)

if __name__ == '__main__':
    eventlet.spawn(backdoor.backdoor_server, eventlet.listen(('localhost', 3000)))

    thread = threading.Thread(target=printing_function)
    thread.start()

    thread = threading.Thread(target=console)
    thread.start()
执行后,我通过telnet连接,导入模块并调用turn_off_printing()。
但它不起作用。我犯了错误,还是不可能?

正如fthinker在上面的评论中所说:


看起来后门服务器使用的名称空间不同。 键入函数名表示它们未定义,并且您的变量 “应打印”也未定义。我在远程登录时测试了这个 进入后门服务器设置的解释器


(如果fthinker回复为回复帖子,我将删除此帖子)

您无法访问
应打印
,因为
\uuuu main\uuu
模块与导入的模块不同,即使它们是相同的模块。检查细节


确保在调用backdoor时传递了所有想要访问的变量/函数

if __name__ == '__main__':
    s=eventlet.spawn(backdoor.backdoor_server, eventlet.listen(('localhost', 3000)), globals())

    thread1 = threading.Thread(target=printing_function)
    thread1.start()

    s.wait()

现在,在端口3000上运行的python解释器上应该可以看到“应该打印”,并将其设置为false将停止打印

打印没有停止。看起来后门服务器使用的名称空间不同。键入函数名表示它们未定义,并且变量“should_printing”也未定义。我在远程登录后门服务器设置的解释器时对此进行了测试。因此,如果不可能,请写下答案,我将标记它。:)仅供参考,
global
在全局范围内是无用的。如果要写入全局作用域,只需在函数中使用它。@ThiefMaster,谢谢。
if __name__ == '__main__':
    s=eventlet.spawn(backdoor.backdoor_server, eventlet.listen(('localhost', 3000)), globals())

    thread1 = threading.Thread(target=printing_function)
    thread1.start()

    s.wait()