Вы также можете использовать функцию, чтобы заменить другой тип регулярного выражения или другой шаблон с использованием списка. При этом вы можете смешивать регулярное выражение, класс символов и действительно основной шаблон текста. Это действительно полезно, когда вам нужно заменить множество элементов, таких как HTML.
* NB: работает с Python 3.x
import re # Regular expression library
def string_cleanup(x, notwanted):
for item in notwanted:
x = re.sub(item, '', x)
return x
line = "<title>My example: <strong>A text %very% $clean!!</strong></title>"
print("Uncleaned: ", line)
# Get rid of html elements
html_elements = ["<title>", "</title>", "<strong>", "</strong>"]
line = string_cleanup(line, html_elements)
print("1st clean: ", line)
# Get rid of special characters
special_chars = ["[!@#$]", "%"]
line = string_cleanup(line, special_chars)
print("2nd clean: ", line)
В функции string_cleanup требуется ваше string x и ваш список не указан в качестве аргументов.
Выход:
Uncleaned: <title>My example: <strong>A text %very% $clean!!</strong></title>
1st clean: My example: A text %very% $clean!!
2nd clean: My example: A text very clean
для каждого элемента в этом списке элементов или шаблона, если требуется замена. Сегодня я нашел легкое решение этой проблемы.
adb devices -l
Вы получите список устройств с их квалификаторами
List of devices attached
P753A12D device usb:26200000
P753A12D device usb:24400000
Затем вы можете использовать квалификаторы вместо такие серийные номера
adb -s usb:26200000 install xxx.apk
Целью серийного номера является уникальная идентификация устройства, поэтому они должны быть разными. При этом некоторые производители не беспокоятся. Возможно также, что прошивка неправильно сообщает номер.
https://stackoverflow.com/questions/4636794/strange-output-of-adb-devices?rq=1
Вы можете проверить серийный номер на реальных устройствах и посмотреть, соответствует ли оно тому, что сообщает adb
.
Settings > About Device > Phone Identity > Device Serial Number
Не существует простого или последовательного метода для этого, о котором я знаю. Вот некоторые примеры, когда другие совершили этот подвиг (но у меня его нет):
xda-developers.com - изменить Wifi, BT, IMEI, серийный номер любого телефона mtk android
hugestreet.info - Как изменить IMEI, Идентификатор устройства любого устройства Android
Не должно быть никаких проблем с запущенными командами, если одновременно подключено только одно устройство.
Ответ, данный @mirokropacek, работает для Linux (и предположительно Mac тоже), но, к сожалению, не работает для Windows. Это связано с тем, как функция register_usb_transport
вызывается в Windows. Оказывается, параметр devpath всегда NULL
в Windows. Мне нужно было обрабатывать ту же ситуацию, поэтому я адаптировал приведенное выше решение для случайного генерирования идентификатора устройства для каждого устройства, если параметр serial
равен NULL или он пуст (нулевая длина).
Мне не нужно беспокоиться о дифференциации устройств в течение длительных периодов времени и многих устройств, создавая псевдослучайное число для идентификатора устройства с помощью rand
, а затем используя sprintf
для создания строки представление этого идентификатора представляется достаточным для моих потребностей, но YMMV. Он генерирует только 4-значный шестнадцатеричный номер, но он работает достаточно хорошо для меня (на данный момент, по крайней мере).
, если ваше устройство коренится попробуйте этот способ изменить серийный номер ваших устройств, сначала подключите один из них к вашему компьютеру, затем введите это в cmd
adb devices
, это показывает ваш идентификатор устройства (серийный номер).
List of devices attached
P753A12D device
выберите новое имя, например NAME1 , затем введите эти команды
adb shell
su
device_name="NEW_NAME"
cd /sys/class/android_usb/android0/
echo -n $device_name > iSerial
cat iSerial
exit
выход из корня exit
выход из оболочки
START теперь отключить кабель USB и запустить эти команды
adb kill-server
снова подключите ваше устройство и введите
adb devices
, теперь вы можете увидеть изменения
List of devices attached
New_NAME device
END note: если он не работал первым отключите телефон и повторите эту часть моего руководства от START до END.
Я столкнулся с той же проблемой. Это связано с тем, что инструмент adb использует серийные номера для идентификации устройств, подключенных к usb, а не их пути к устройствам (которые уникальны для вас).
Если вы чувствуете, что руки загрязнены, загрузите источник Android дерево, перейдите к system/core/adb/transport.c
, измените его на нечто подобное:
void register_usb_transport(usb_handle *usb, const char *serial, const char *devpath, unsigned writeable)
{
atransport *t = calloc(1, sizeof(atransport));
D("transport: %p init'ing for usb_handle %p (sn='%s')\n", t, usb,
serial ? serial : "");
init_usb_transport(t, usb, (writeable ? CS_OFFLINE : CS_NOPERM));
// if(serial) {
// t->serial = strdup(serial);
// }
if(devpath) {
t->devpath = strdup(devpath);
t->serial = strdup(devpath);
}
тип make adb
с пути верхнего уровня и вуаля. Устройства используют пути usb для идентификации. Теперь вы можете установить & amp; выполнить все устройства из Eclipse одним щелчком мыши.
Если вы не хотите изменять само устройство и / или не имеете корневого доступа, а устройство имеет доступ к сети, вы можете переключиться на использование TCPIP вместо USB:
adb tcpip 5555
adb connect yourhostname
Я выполнил это через туннели SSH где он будет подключаться к локальному хосту, поэтому все устройства отображаются как «localhost», что совершенно не полезно. Добавление хостов в / etc / hosts (все указывает на localhost) исправлено для меня.