Я сделал похожий сценарий для отключения телевизора Roku моего ребенка, если он включен. Я буду держать это всю ночь, просто чтобы ребенок не смотрел телевизор ночью. (У нее есть TCL Roku TV). Если бы я рефакторинг кода для вашего использования, это выглядело бы примерно как
#import required libs
import keyboard
...
count = 0
while True:
if ledBlue.off() = true
sleep(1)
count += 1
if count == 10:
run_py="sudo python3 project.py"
os.system(run_py)
time.sleep(2)
restart_service="sudo restart service"
os.system(restart_service)
count = 0
elif keyboard.is_pressed('q'):
break
else:
pass
, это немного глупо, но да, зная метод внутри ledBlue()
может быть использован для оптимизации этого. Я добавил библиотечные библиотеки, потому что этот скрипт будет продолжать работать, так что вы сможете нажать «q», чтобы выйти из цикла.
вот мой оригинальный код:
def DenyRemote(self):
state = self.device_pw_state()
while True:
sleep(10)
if state == "PowerOn":
self.roku._post('/keypress/Power')
elif keyboard.is_pressed('q'):
break
else:
pass
Это - то, как я выложил.NET 1,1 версии, скомпилированные против WSSv2 API и.NET 2,0 скомпилированных против блока WSSv3. Это будет работать на VS 2005 и 2008.
Необходимо будет использовать http://www.codeplex.com/Wiki/View.aspx?ProjectName=MSBee MSBEE
Работа с.NET 1.1 с Visual Studio 2008
Откройте *.csproj и узнайте, где на SharePoint dll ссылаются и изменение в чем-то вроде этого, что изменяет блок, на который ссылаются, в зависимости от Вашей цели (FX1_1 означает предназначение для.NET1.1 и поэтому WSSv2),
<Reference Include="Microsoft.SharePoint">
<HintPath Condition="'$(TargetFX1_1)'!='true'">pathto\WSS3\Microsoft.SharePoint.dll</HintPath>
<HintPath Condition="'$(TargetFX1_1)'=='true'">pathto\WSS2\Microsoft.SharePoint.dll</HintPath>
</Reference>
Используйте условную компиляцию для различий в случае необходимости
#if FX1_1
// WSSv2 specific code
#else
// WSSv3 specific code
#endif
Если Вы получаете ошибку компилятора, но код выглядит правильным, может случиться так, что ошибка только для.NET1.1 / WSSv2 и компилирует прекрасный в.NET2/WSSv3. Проверьте выходную вкладку для видения, какая цель ошибка произошла
Необходимо будет также освоить некоторые перемещения ниндзя MSBUILD, чтобы сохранить 1 процесс сборки шага и сохранить себя нормальным http://brennan.offwhite.net/blog/2006/11/30/7-steps-to-msbuild/ с помощью MSBUILD, можно заставить VS компилировать обе версии одновременно, не обращаясь к командной строке.
Это выполнит.NET1.1 компиляцию после того, как.NET закончила и произвела некоторые сообщения к Окну вывода, чтобы помочь Вам разработать, где ошибки произошли.
<Target Name="BeforeBuild">
<Message Text="--- Building for .NET 1.1 ---" Importance="high" Condition="'$(TargetFX1_1)'=='true'" />
<Message Text="--- Building for .NET 2.0 ---" Importance="high" Condition="'$(TargetFX1_1)'!='true'" />
</Target>
<Target Name="AfterBuild" Condition="'$(TargetFX1_1)'!='true'">
<MSBuild Projects="$(MSBuildProjectFile)" Properties="TargetFX1_1=true;" />
</Target>
Вы могли дать "псевдоним экстерна" движение.
Это - одно из тех времен, когда позднее связывание VB (опция, строгая прочь) подход, работает хорошо. Список на C# 4.0 и dynamic
.
Вы могли бы попытаться писать интерфейс для битов, в которых Вы нуждаетесь (в основной библиотеке) и пишете 2 dlls: одна ссылка на каждую версию sharepoint dll. Для обоих проектов реализуйте интерфейс (бросок NotSupportedException
для битов Вы не можете сделать), и загрузите соответствующий dll во времени выполнения? (подход фабрики)
Просто попробуйте его отдельным методом, прежде чем Вы будете слишком поглощены... не делают всего этого, пока Вы не знаете, что это работает на самый простой из простых методов.