关于python 命令控制程序启动与结束?

我在pycharm中执行我的代码,我想通过输入命令qd来开始执行程序,输入tz来结束程序,结束程序时也要执行一些代码。
while True:
cd = input("请输入命令:")
if cd == 'qd': # 启动
auto() # 自动运行流程
if cd == 'tz': # 停止
reset() # 重置流程
当输入命令qd后可以进入zidong()函数开始执行
while True:
sleep(0.05) # 限速
if side() == 'BUY'
sell()
if side() == 'SELL'
buy()
但进入这个循环之后就无法再输入停止命令了,请问怎么设计才可以随时可以输入停止命令(并且不影响auto函数执行)?十分感谢!

可以使用一个标志变量来控制程序的启动和结束。
首先,在主程序中设置一个标志变量,例如 running,用于指示程序是否处于运行状态。在程序开始时,running 应设置为 False。
然后,在每次循环中检查 running 的值。如果 running 为 True,则执行 auto() 函数;如果 running 为 False,则等待用户输入命令。
当用户输入 qd 命令时,将 running 设置为 True,并执行 auto() 函数。当用户输入 tz 命令时,将 running 设置为 False,并执行 reset() 函数。
示例代码如下:
running
running = False
while True:
cmd = input("请输入命令:")
if cmd == 'qd':
running = True
elif cmd == 'tz':
running = False
if running:
auto()
else:
reset()
在这段代码中,我们使用了一个 while 循环来不断接收用户的命令。在每次循环中,我们会读入用户的命令,并根据命令的不同设置 running 的值。如果 running 为 True,则执行 auto() 函数;如果 running 为 False,则执行 reset() 函数。
这样,用户就可以随时输入 tz 命令来停止程序,也可以输入 qd 命令来重新启动程序。
希望这些信息能够帮助您。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2022-12-17
from time import sleep

def auto():
while True:
cd=input("请输入命令:")
if cd=='qd':
print("已启动")
return zidong()
if cd=='tz':
print("已重置")
return reset()

def reset():
return

def zidong():
while True:
sleep(0.05)
zt=side()
if zt=='BUY':
return sell()
elif zt=='SELL':
return buy()
else:
return

def side():
a=input(f"选择状态:输入BUY或SELL:")
print(f"选择的是:{a}\n当前进入:{a}模式")
return a

def sell():
tag="-"
print("操作中…")
print(f"本次操作完毕")
print(f"当前状态:SELL\n{tag*60}\n")
return auto()

def buy():
tag="-"
print("操作中…")
print(f"本次操作完毕")
print(f"当前状态:BUY\n{tag*60}\n")
return auto()

if __name__ == "__main__":
auto()

'''python运行效果
请输入命令:qd
已启动
选择状态:输入BUY或SELL:BUY
选择的是:BUY
当前进入:BUY模式
操作中…
本次操作完毕
当前状态:SELL
------------------------------------------------------------
请输入命令:qd
已启动
选择状态:输入BUY或SELL:SELL
选择的是:SELL
当前进入:SELL模式
操作中…
本次操作完毕
当前状态:BUY
------------------------------------------------------------
请输入命令:tz
已重置

'''
第2个回答  2022-12-15
您可以使用 Python 中的 threading 模块来实现这个功能。threading 模块提供了一个 Thread 类,允许您创建和管理多线程。
您可以把 auto() 函数放到一个新的线程中执行,然后在主线程中检查输入命令,如果检测到输入了 tz 命令,则可以通过调用 Thread 类的 stop() 方法来终止线程。代码大概长这样:
from threading import Thread
def auto():
# 自动运行流程
while True:
sleep(0.05) # 限速
if side() == 'BUY':
sell()
if side() == 'SELL':
buy()
auto_thread = Thread(target=auto)
while True:
cd = input("请输入命令:")
if cd == 'qd':
auto_thread.start()
if cd == 'tz':
auto_thread.stop()
reset() # 重置流程
这样就可以在自动运行流程进行的同时随时输入 tz 命令来终止流程了。追问

非常感谢您的细致回答,尝试了一下,在输入tz停止auto_thread.stop()线程时,提示AttributeError: 'Thread' object has no attribute 'stop',请问如何解决?

本回答被提问者采纳