首页 新闻 会员 周边

在控制台执行代码的话需要按ctrl+c才会停止,但是在代码(python)上运行的话因为不能手动执行ctrl+c,所以就一直阻塞在那了,无法执行余下的代码

0
悬赏园豆:5 [待解决问题]

import subprocess
import os

p = subprocess.Popen("adb shell logcat|grep 'Failed to get uuid'", shell=True, stdout=subprocess.PIPE)
for i in iter(p.stdout.readline, ''):
print("success")

烧鸭的主页 烧鸭 | 初学一级 | 园豆:101
提问于:2019-12-09 21:48

已经解决了,用的signal模块下的一个send_signal方法,可以在执行cmd的同时模拟ctrl+c指令 p.send_signal(signal.SIGINT)

烧鸭 4年前
< >
分享
所有回答(4)
0

你这问题描述就是折磨人啊,要命

jakio6 | 园豆:1318 (小虾三级) | 2019-12-10 00:00
0

adb shell logcat|grep 'Failed to get uuid . 你这个命令允许的时候是不是就不会停止下来呀?

xiaobaiskill | 园豆:1087 (小虾三级) | 2019-12-10 10:23

恩 执行后就不会停止了,在控制台的话需要按ctrl+c才会停止,但是在代码上运行的话因为不能执行ctrl+c,所以就一直阻塞在那了,无法执行余下的代码

支持(0) 反对(0) 烧鸭 | 园豆:101 (初学一级) | 2019-12-10 10:27

@烧鸭: 它不停止,能输出个屁呀.p.stdout 一直等着 命令 结束呢!!!

支持(0) 反对(0) xiaobaiskill | 园豆:1087 (小虾三级) | 2019-12-10 10:29

@xiaobaiskill:执行adb shell logcat|grep 'Failed to get uuid的时候本身代码就不能停止,不能用p.stdout吗?

支持(0) 反对(0) 烧鸭 | 园豆:101 (初学一级) | 2019-12-10 10:32

@xiaobaiskill: 也是不行,那段shell指令本身是没有东西输出的。我是想判断它为空时返回true,但是连接到手机后就一直不能自动停止,如果不连接手机直接运行就可以正常执行下一步,但与我的需求不符

支持(0) 反对(0) 烧鸭 | 园豆:101 (初学一级) | 2019-12-10 10:52

@烧鸭: 不知道你要干什么,无法回答!

支持(0) 反对(0) xiaobaiskill | 园豆:1087 (小虾三级) | 2019-12-10 10:55

@xiaobaiskill: 就是想在执行adb shell logcat|grep 'Failed to get uuid“的时候能够中止shell执行,类似于在该代码块中加个定时器,执行到一定时间就关闭它

支持(0) 反对(0) 烧鸭 | 园豆:101 (初学一级) | 2019-12-10 10:58

@xiaobaiskill: 我看看 多谢了

支持(0) 反对(0) 烧鸭 | 园豆:101 (初学一级) | 2019-12-10 11:34
0

后台运行啊,在cmd命令后面加个&符号就行了,命令不会自己停止的话,在代码最后加个判断,在某种条件下Kill掉这个命令的进程

代码笔记~ | 园豆:202 (菜鸟二级) | 2019-12-10 17:33
0

p.send_signal(signal.SIGINT)

烧鸭 | 园豆:101 (初学一级) | 2019-12-11 14:45
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册