2015-10-30 4 views
1

Я пытаюсь получить logcat adb и сохранить в файл. Я попытался POPEN и позвонить, как показано нижеКак использовать подпроцесс для записи в файл

f = open("/Users/log.txt") 
    subprocess.call(["adb logcat"], stdout=f) 
    f_read = f.read() 
    print f_read 

Но я получаю ошибку

File "testPython.py", line 198, in getadbLogs 
    subprocess.call(["adb logcat"], stdout=f) 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", line 522, in call 
    return Popen(*popenargs, **kwargs).wait() 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", line 710, in __init__ 
    errread, errwrite) 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", line 1335, in _execute_child 
    raise child_exception 
**OSError: [Errno 2] No such file or directory** 

Я не уверен, что я делаю неправильно. Возможно ли получить журналы logcat adb с помощью подпроцесса? Я проверил путь к файлу правильно.

ответ

1

Потому что вы открыли f в режиме чтения (r). Если вы не выбираете режим, режим по умолчанию - r.

Для записи в файл, вы должны использовать режим w как это:

f = open("/Users/log.txt", 'w') 
subprocess.call(["adb logcat"], stdout=f) 
f.close() 

f = open("/Users/log.txt") 
f_read = f.read() 
print f_read 
f.close() 

И использовать with для автоматического закрытия файла будет более простым:

with open("/Users/log.txt", 'w') as f: 
    subprocess.call(["adb logcat"], stdout=f) 

with open("/Users/log.txt") as f: 
    f_read = f.read() 

print f_read 
+0

да я просто понял, как хорошо , Но поскольку это adb logcat, он постоянно держит демпинг в файл. Как мне его остановить или убить? – user2661518

+1

@ user2661518 Вы можете установить тайм-аут, например: 'subprocess.call ('python', timeout = 2)' будет запускать только python в течение 2 секунд. И тогда подпроцесс поднимет ошибку 'subprocess.TimeoutExpired' и скажет:' Команда 'python' истекает через 2 секунды'. –

+0

, поскольку я использую python2.7. Subprocess.call не имеет аргумента тайм-аута – user2661518

Смежные вопросы