if chinanet is False: print("网络异常") if any(p.name() == 'simplest.py' for p in psutil.process_iter()): # 中断 simplest.py os.system("pkill -f simplest.py") getNet()
时间: 2023-12-06 08:41:30 浏览: 33
这是一段 Python 代码,它的作用是检测网络是否异常,如果异常则中断名为 "simplest.py" 的进程并重新获取网络连接。
具体而言,它首先检查变量 `chinanet` 是否为 False,如果是则打印出 "网络异常"。接下来,它使用 psutil 库中的 `process_iter()` 函数遍历当前正在运行的所有进程,判断是否有名为 "simplest.py" 的进程在运行。如果有,则使用 os 库中的 `system()` 函数执行 shell 命令 "pkill -f simplest.py",即中断名为 "simplest.py" 的进程。最后,无论是否中断了进程,都会调用函数 `getNet()` 来重新获取网络连接。
相关问题
while True: proc = subprocess.Popen(["python3", "/home/pi/Documents/8-17/simplest.py"]) while proc.poll() is None: time.sleep(1) print("simplest运行中.....") chinanet = isNetChainOK() if chinanet is False: print("网络异常") getNet() if any(p.name() == 'simplest.py' for p in psutil.process_iter()): print("中断simplest.py") # 中断 simplest.py os.system("pkill -f simplest.py") if proc.returncode == 0: print("simplest运行正常.....") break 改进一下
可以将代码改进如下:
```
while True:
# 启动 simplest.py
proc = subprocess.Popen(["python3", "/home/pi/Documents/8-17/simplest.py"])
# 监听 simplest.py 进程状态
while proc.poll() is None:
time.sleep(1)
print("simplest运行中.....")
# 检查网络状态
chinanet = isNetChainOK()
if chinanet is False:
print("网络异常")
getNet()
# 中断 simplest.py 进程
for p in psutil.process_iter():
if p.name() == 'simplest.py':
print("中断simplest.py")
p.kill()
# simplest.py 进程结束后检查返回值
if proc.returncode == 0:
print("simplest运行正常.....")
break
```
这样改进后,当网络异常时会中断 simplest.py 进程,等到网络恢复后再重新启动 simplest.py 进程。同时,代码也会检查 simplest.py 进程的返回值,只有在返回值为 0 时才会跳出循环。
while True : ret = os.system("python3 /home/pi/Documents/8-17/simplest.py") if ret == 0: if chinanet is False: print("网络异常") if any(p.name() == 'simplest.py' for p in psutil.process_iter()): print("网络异常,中断simplest.py") # 中断 simplest.py os.system("pkill -f simplest.py") # simplest.py 运行成功,退出循环 break else: # simplest.py 运行失败,判断是否是网络中断导致的 chinanet = isNetChainOK() if chinanet is False: print("simplest.py 运行失败,且网络异常,尝试重新连接网络") getNet() else: print("simplest.py 运行失败,重新启动 simplest.py") 我想让网络异常时中断正在运行的simplest.py
你可以在判断网络异常的部分加上中断 simplest.py 的代码。具体实现方式可以使用 psutil 模块来获取正在运行的进程列表,然后判断是否有 simplest.py 进程在运行,如果有则使用 os.system("pkill -f simplest.py") 来中断进程。示例代码如下:
```python
import os
import psutil
while True:
ret = os.system("python3 /home/pi/Documents/8-17/simplest.py")
if ret == 0:
if chinanet is False:
print("网络异常")
if any(p.name() == 'simplest.py' for p in psutil.process_iter()):
print("网络异常,中断simplest.py")
# 中断 simplest.py
os.system("pkill -f simplest.py")
# simplest.py 运行成功,退出循环
break
else:
# simplest.py 运行失败,判断是否是网络中断导致的
chinanet = isNetChainOK()
if chinanet is False:
print("simplest.py 运行失败,且网络异常,尝试重新连接网络")
getNet()
if any(p.name() == 'simplest.py' for p in psutil.process_iter()):
print("网络异常,中断simplest.py")
# 中断 simplest.py
os.system("pkill -f simplest.py")
else:
print("simplest.py 运行失败,重新启动 simplest.py")
```