前言:
python自带的编辑器是IDLE,在C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Python 2.7 文件夹下也能找到。它能使用RUN下的Eun Modle(F5)直接运行测试,这方便我们编辑。但是我发现它存在一个运行上的bug。
运行实例:
注:PYTHON_BAN是当前运行的python版本,测试你可以直接复制2或3。
可以参考我的另一篇文章 https://my.oschina.net/jacky326/blog/1838149
#-*-coding:utf-8-*-
#tx.py
#PYTHON_BAN是python版本
from BASECLASS import PYTHON_BAN
import threading,time
def main():
global a
a=0
#实时接收命令
def order():
while 1:
global a
if PYTHON_BAN in (2,):
a =raw_input('order:')
else:
a = input('order:')
#a=a+1
time.sleep(2)
#这里是必要的!子线程不死程序一样不会结束。
if a in ('stop','exit',):
break
t = threading.Thread(target=order)
t.start()
while True:
print(a)
time.sleep(2)
if a in ('stop','exit',):
print('Now,end the work!!!')
return
这段代码的功能是——不断的打印a的值,可以通过order线程实时对它赋值,当他是stop或exit时,退出任务。
我先说说这段代码的实用性吧,不然大家以为这是我心血来潮的测试。这段代码可以嵌入到任何长时间运行的项目中。实时接收的参数可以作为命令,即时干预正在运行的程序,例如让它保存当前任务进度并退出,暂停,打印当前运行信息等。这样可以“正常退出”而不用kill掉它。而这样做的好处是,在我需要更新正式服务器的代码时,可以等待它正常保存进度和数据再更新,而不会因为强硬的退出而导致数据丢失。(灵感源于c++服务器开发)
好继续说bug。
这段代码直接使用python tx.py是可以正常执行的,但在idle下运行却会有BUG(现象:停留,只有等待有输入后才继续运行主线程)
如果我们不用input而是用a=a+1 则正常运行。
这bug暂时未见有人提及,在此提及一下。
后记:
idle虽然是个自带的正规编写工具,但F5的运行模式存在BUG。虽然我没测试出其他问题,但无论运行还是测试还是应当直接用python xxx.py启动。测试的方法有很多,可以用print,也可以打断点(wing IDE5等工具)。