while True : with open('/home/pi/Documents/8-17/simplest_output.txt', 'w') as f: proc = subprocess.Popen(["python3", "/home/pi/Documents/8-17/simplest.py"], stdout=f, stderr=f) proc.wait() # 等待子进程执行完毕 if proc.returncode == 0: print("simplest运行正常.....") break 我想让主进程在simplest运行正常时,循环打印 simplest运行正常
时间: 2023-12-10 18:38:56 浏览: 76
你可以将打印语句放在一个 while 循环内,直到子进程返回值为 0 才跳出循环。例如:
```
while True:
with open('/home/pi/Documents/8-17/simplest_output.txt', 'w') as f:
proc = subprocess.Popen(["python3", "/home/pi/Documents/8-17/simplest.py"], stdout=f, stderr=f)
proc.wait() # 等待子进程执行完毕
if proc.returncode == 0:
while True:
print("simplest运行正常.....")
time.sleep(1)
if not os.path.exists('/home/pi/Documents/8-17/simplest_output.txt'):
break
break
```
这里使用了一个内层的 while 循环,在 simplest 运行正常的同时,不断打印运行正常的信息,直到 simplest_output.txt 文件被删除(即子进程执行结束)才跳出内层循环,跳出外层循环。注意最后需要加上 `time.sleep(1)` 延时一秒,否则会一直打印,造成无法正常退出。
相关问题
while True : with open('/home/pi/Documents/8-17/simplest_output.txt', 'w') as f: proc = subprocess.Popen(["python3", "/home/pi/Documents/8-17/simplest.py"], stdout=f, stderr=f) proc.wait() # 等待子进程执行完毕 if proc.returncode == 0: print("simplest运行正常.....") break 主窗口依然不会打印simplest运行正常
这是因为你在子进程中将输出重定向到了文件 `/home/pi/Documents/8-17/simplest_output.txt`,而没有将输出传递回父进程。你可以在子进程中打印一些信息,以便在主窗口中查看。
例如,在子进程中添加以下代码:
```python
print("simplest运行正常.....")
```
这样当子进程正常退出时,就会在 `/home/pi/Documents/8-17/simplest_output.txt` 文件中输出该信息,同时也会在主窗口中打印出来。
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("网络异常") for proc in psutil.process_iter(): if proc.name() == 'simplest.py': print("simplest受网络问题强行中断") proc.terminate() # or proc.kill() proc = subprocess.Popen(["python3", "/home/pi/Documents/8-17/simplest.py"]) getNet() 断网后报错:while proc.poll() is None: AttributeError: 'Process' object has no attribute 'poll'
这个错误可能是因为 subprocess.Popen() 方法返回的对象类型不是 Process 类型,而是 NoneType 类型。这可能是由于 subprocess.Popen() 调用失败导致的。
你可以在调用 subprocess.Popen() 方法之前添加一些错误处理代码,以避免此错误。例如:
```
while True:
try:
proc = subprocess.Popen(["python3", "/home/pi/Documents/8-17/simplest.py"])
break
except Exception as e:
print("Error starting process:", e)
time.sleep(1)
while proc.poll() is None:
time.sleep(1)
print("simplest运行中.....")
chinanet = isNetChainOK()
if chinanet is False:
print("网络异常")
for proc in psutil.process_iter():
if proc.name() == 'simplest.py':
print("simplest受网络问题强行中断")
proc.terminate() # or proc.kill()
proc = subprocess.Popen(["python3", "/home/pi/Documents/8-17/simplest.py"])
getNet()
```
这样,如果 subprocess.Popen() 调用失败,代码将等待 1 秒钟,然后重试。如果调用成功,代码将继续执行。
阅读全文