如何通过Bash终端修改运行中Python脚本的Status变量
跨终端控制Python程序的几种实现方案
方案1:文件状态标记法(最简单易实现)
通过一个文件作为运行状态的标记,程序循环检查该文件是否存在,外部终端通过创建/删除文件来控制程序启停。
修改后的Python代码:
import os import sys import time # 定义全局可访问的状态文件路径 STATUS_FLAG = "/tmp/program_run_flag" def toggle_program(): if os.path.exists(STATUS_FLAG): os.remove(STATUS_FLAG) print("程序将停止运行") else: print("程序未在运行,请先启动程序") def main(): # 处理toggle命令参数 if len(sys.argv) > 1 and sys.argv[1] == "toggle": toggle_program() return # 启动程序:创建状态标记文件 with open(STATUS_FLAG, 'w') as f: f.write("1") try: # 循环检查标记文件是否存在 while os.path.exists(STATUS_FLAG): print("Program is Running") time.sleep(1) # 避免输出刷屏,添加延迟 finally: print("Program is not Running") # 清理标记文件(可选) if os.path.exists(STATUS_FLAG): os.remove(STATUS_FLAG) if __name__ == "__main__": main()
使用方式:
- 第一个终端启动程序:
python pathtocode/code.py - 第二个终端执行toggle命令停止程序:
python pathtocode/code.py toggle
方案2:信号处理法(更高效)
利用Linux系统的进程信号机制,让程序捕获指定信号后修改运行状态,外部终端通过向进程发送信号实现控制。
修改后的Python代码:
import signal import sys import time import os import subprocess def get_program_pid(): # 查找当前程序的进程PID(精确匹配脚本路径可避免误杀) cmd = ["pgrep", "-f", f"{sys.executable} {__file__}"] result = subprocess.run(cmd, capture_output=True, text=True) if result.returncode == 0: return int(result.stdout.strip()) return None def toggle_program(): pid = get_program_pid() if pid: # 发送SIGUSR1自定义信号给进程 os.kill(pid, signal.SIGUSR1) print("已发送停止信号给程序") else: print("程序未在运行") def main(): if len(sys.argv) > 1 and sys.argv[1] == "toggle": toggle_program() return running = True # 定义信号处理函数:收到信号后修改运行状态 def stop_handler(signum, frame): nonlocal running running = False print("\n收到停止信号") # 注册SIGUSR1信号的处理逻辑 signal.signal(signal.SIGUSR1, stop_handler) try: while running: print("Program is Running") time.sleep(1) finally: print("Program is not Running") if __name__ == "__main__": main()
使用方式:
- 第一个终端启动程序:
python pathtocode/code.py - 第二个终端执行toggle命令:
python pathtocode/code.py toggle
方案对比
- 文件标记法:实现门槛低,无需了解进程信号,适合快速开发;缺点是依赖文件系统,极端情况下可能出现文件残留。
- 信号处理法:系统级进程通信方式,性能更高,逻辑更严谨;需要对Linux信号机制有基础了解。
内容的提问来源于stack exchange,提问作者IloveMath
相关产品推荐
相关产品推荐

