Вышеупомянутое упоминание https://github.com/Flowm/etherkey - это один из способов. Клавиатура эмулируется из rPi, но принцип можно использовать от ПК к ПК (или от Mac до любого). Основной ответ на ваш вопрос - использовать чип OTG, а затем вы управляете этим чипом через USB-последовательный адаптер.
https://euer.krebsco.de/a- software-kvm-switch.html использует очень похожий метод, используя Arduino вместо Teensy.
Общий ответ: вам нужно устройство с поддержкой OTG или устройство с поддержкой подчиненного устройства: Arduino, Teensy, Pi 0 (либо из брендов из Рапберри, либо из Orange), и только модели ZERO являются OTG-совместимыми), или rPi-A с большой настройкой (поскольку в нем нет USB-концентратора, его теоретически можно преобразовать в подчиненный , никогда не находил никакого публичного учебника для этого) или любого смартфона (Samsung, Nokia, HTC, Oukitel ... большинство смартфонов OTG способны). Если вы идете на Pi или телефон, то вы хотите выкопать USB-гаджет. Более дешевые решения (Arduino / Teensy) нуждаются в специальной прошивке.
Вы не должны использовать 4 пробелов на своей второй условной строке. Возможно, используйте:
if (cond1 == 'val1' and cond2 == 'val2' and
cond3 == 'val3' and cond4 == 'val4'):
do_something
кроме того, не забывайте, что пробел более гибок, чем Вы могли бы думать:
if (
cond1 == 'val1' and cond2 == 'val2' and
cond3 == 'val3' and cond4 == 'val4'
):
do_something
if (cond1 == 'val1' and cond2 == 'val2' and
cond3 == 'val3' and cond4 == 'val4'):
do_something
Оба из тех довольно ужасны все же.
, Возможно, теряют скобки (, Руководство по стилю препятствует этому хотя)?
if cond1 == 'val1' and cond2 == 'val2' and \
cond3 == 'val3' and cond4 == 'val4':
do_something
Это, по крайней мере, дает Вам некоторое дифференцирование.
Или даже:
if cond1 == 'val1' and cond2 == 'val2' and \
cond3 == 'val3' and \
cond4 == 'val4':
do_something
я думаю, что предпочитаю:
if cond1 == 'val1' and \
cond2 == 'val2' and \
cond3 == 'val3' and \
cond4 == 'val4':
do_something
Вот Руководство по стилю , который (с 2010) рекомендует использовать скобки.
Всего несколько других случайных идей для пользы полноты. Если они работают на Вас, используйте их. Иначе Вы - вероятно, более обеспеченная попытка чего-то еще.
Вы могли также сделать это со словарем:
>>> x = {'cond1' : 'val1', 'cond2' : 'val2'}
>>> y = {'cond1' : 'val1', 'cond2' : 'val2'}
>>> x == y
True
Эта опция более сложна, но можно также найти его полезным:
class Klass(object):
def __init__(self, some_vars):
#initialize conditions here
def __nonzero__(self):
return (self.cond1 == 'val1' and self.cond2 == 'val2' and
self.cond3 == 'val3' and self.cond4 == 'val4')
foo = Klass()
if foo:
print "foo is true!"
else:
print "foo is false!"
Dunno, если это работает на Вас, но это - другая опция рассмотреть. Вот еще один путь:
class Klass(object):
def __init__(self):
#initialize conditions here
def __eq__(self):
return (self.cond1 == 'val1' and self.cond2 == 'val2' and
self.cond3 == 'val3' and self.cond4 == 'val4')
x = Klass(some_values)
y = Klass(some_other_values)
if x == y:
print 'x == y'
else:
print 'x!=y'
последних двух, которые я не протестировал, но понятия, должно быть достаточно для получения Вас движение, если это - то, с чем Вы хотите пойти.
(И для записи, если это - просто одна вещь времени, Вы - вероятно, просто более обеспеченное использование методики, которую Вы представили сначала. При выполнении сравнения в большом количестве мест эти методы могут улучшить удобочитаемость достаточно, чтобы заставить Вас не чувствовать себя так плохо о том, что они - вид hacky.)
Что, если мы только вставляем дополнительную пустую строку между условием и телом и делаем остальных каноническим способом?
if (cond1 == 'val1' and cond2 == 'val2' and
cond3 == 'val3' and cond4 == 'val4'):
do_something
p.s. Я всегда использую вкладки, не пробелы; я не могу подстроить...
Я предлагаю переместиться and
ключевое слово к второй строке и расположить с отступом все строки, содержащие условия с двумя пробелами вместо четыре:
if (cond1 == 'val1' and cond2 == 'val2'
and cond3 == 'val3' and cond4 == 'val4'):
do_something
Это точно, как я решаю эту проблему в своем коде. При наличии ключевого слова, поскольку первое слово в строке делает условие намного более читаемым, и сокращение количества пробелов далее отличает условие от действия.
"все" и "любой" хороши для многих условий того же случая типа. НО они всегда оценивают все условия. Как показано в этом примере:
def c1():
print " Executed c1"
return False
def c2():
print " Executed c2"
return False
print "simple and (aborts early!)"
if c1() and c2():
pass
print
print "all (executes all :( )"
if all((c1(),c2())):
pass
print
Я предпочитаю этот стиль, когда у меня есть ужасно большое если-условие:
if (
expr1
and (expr2 or expr3)
and hasattr(thingy1, '__eq__')
or status=="HappyTimes"
):
do_stuff()
else:
do_other_stuff()
Это не улучшается так, но...
allCondsAreOK = (cond1 == 'val1' and cond2 == 'val2' and
cond3 == 'val3' and cond4 == 'val4')
if allCondsAreOK:
do_something
Кто-то должен защитить использование вертикального пробела здесь!:)
if ( cond1 == val1
and cond2 == val2
and cond3 == val3
):
do_stuff()
Это делает каждое условие явно видимым. Это также позволяет более чистое выражение более сложных условий:
if ( cond1 == val1
or
( cond2_1 == val2_1
and cond2_2 >= val2_2
and cond2_3 != bad2_3
)
):
do_more_stuff()
Да, мы обмениваем немного вертикальной недвижимости на ясность. Определенно стоящий того IMO.
Я обратился к следующему в вырожденном случае, где это - просто AND's или OR's.
if all( [cond1 == 'val1', cond2 == 'val2', cond3 == 'val3', cond4 == 'val4'] ):
if any( [cond1 == 'val1', cond2 == 'val2', cond3 == 'val3', cond4 == 'val4'] ):
Это бреет несколько символов и проясняет, что нет никакой тонкости к условию.
Простите мой noobness, но это происходит, что я не так хорошо осведомлен относительно #Python как ни один из Вас здесь, но это происходит, что я нашел что-то подобным при сценариях моих собственных объектов в 3D моделировании МЕТКИ НАЧАЛА ИНФОРМАЦИИ, таким образом, я адаптирую свой алгоритм к тому из Python.
проблема, которую я нахожу здесь, является двухсторонней:
Делают для обхода всех этих проблем, сценарий должен пойти как это
param_Val01 = Value 01 #give a meaningful name for param_Val(i) preferable an integer
param_Val02 = Value 02
param_Val03 = Value 03
param_Val04 = Value 04 # and ... etc
conditions = 0 # this is a value placeholder
########
Add script that if true will make:
conditions = conditions + param_Val01 #value of placeholder is updated
########
### repeat as needed
if conditions = param_Val01 + param_Val02 + param_Val03 + param_Val04:
do something
Профессионалы этого метода:
Сценарий читаем.
Сценарий может быть легок сохраняемый.
Hope это помогает Вам весь
Сложите свои условия в список и делайте что-л. например:
if False not in Conditions:
do_something