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")
你这问题描述就是折磨人啊,要命
adb shell logcat|grep 'Failed to get uuid
. 你这个命令允许的时候是不是就不会停止下来呀?
恩 执行后就不会停止了,在控制台的话需要按ctrl+c才会停止,但是在代码上运行的话因为不能执行ctrl+c,所以就一直阻塞在那了,无法执行余下的代码
@烧鸭: 它不停止,能输出个屁呀.p.stdout 一直等着 命令 结束呢!!!
@xiaobaiskill:执行adb shell logcat|grep 'Failed to get uuid的时候本身代码就不能停止,不能用p.stdout吗?
@xiaobaiskill: 也是不行,那段shell指令本身是没有东西输出的。我是想判断它为空时返回true,但是连接到手机后就一直不能自动停止,如果不连接手机直接运行就可以正常执行下一步,但与我的需求不符
@烧鸭: 不知道你要干什么,无法回答!
@xiaobaiskill: 就是想在执行adb shell logcat|grep 'Failed to get uuid“的时候能够中止shell执行,类似于在该代码块中加个定时器,执行到一定时间就关闭它
@烧鸭: 使用Popen运行程序超时就kill
@xiaobaiskill: 我看看 多谢了
后台运行啊,在cmd命令后面加个&符号就行了,命令不会自己停止的话,在代码最后加个判断,在某种条件下Kill掉这个命令的进程
p.send_signal(signal.SIGINT)
已经解决了,用的signal模块下的一个send_signal方法,可以在执行cmd的同时模拟ctrl+c指令 p.send_signal(signal.SIGINT)
– 烧鸭 5年前