我可以通过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()