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("网络异常") proc.terminate() break getNet() 怎么从simplest终端输出里面截取信息
时间: 2023-12-20 15:07:35 浏览: 70
您可以使用Python的subprocess模块中的管道来捕获simplest.py的输出。以下是一个示例代码段:
```python
import subprocess
# 启动子进程
proc = subprocess.Popen(["python3", "/home/pi/Documents/8-17/simplest.py"], stdout=subprocess.PIPE)
# 循环读取输出
while True:
# 读取输出
output = proc.stdout.readline().decode().strip()
if output == '' and proc.poll() is not None:
break
if output:
# 在这里处理输出
print(output)
```
这个示例代码段将启动simplest.py进程,并循环读取其输出。在读取到输出后,可以在if语句中添加自己的处理逻辑。例如,您可以将输出存储在列表中,或者在满足某些条件时终止进程。
相关问题
import subprocess while True: proc = subprocess.Popen(["python3", "/home/pi/Documents/8-17/simplest.py"]) try: while True: if proc.poll() is not None: break print("simplest运行成功.....") except KeyboardInterrupt: proc.terminate() break 这样simplest死循环里打印的信息不会出现在终端
这是因为 `subprocess.Popen` 创建的子进程是在独立的进程空间内执行的,并不会把输出打印到终端。要想在终端打印子进程的输出,可以使用 `subprocess.PIPE` 来捕获子进程的标准输出和标准错误输出,然后在父进程中打印出来。修改代码如下:
```python
import subprocess
while True:
proc = subprocess.Popen(["python3", "/home/pi/Documents/8-17/simplest.py"],
stdout=subprocess.PIPE, stderr=subprocess.PIPE)
try:
while True:
if proc.poll() is not None:
break
# 读取子进程的输出
output = proc.stdout.readline().decode().strip()
if output:
print(output)
error = proc.stderr.readline().decode().strip()
if error:
print(error)
except KeyboardInterrupt:
proc.terminate()
break
```
这样就可以实时打印子进程的输出了。
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 秒钟,然后重试。如果调用成功,代码将继续执行。
阅读全文