2016-12-01 33 views
-1

我剛剛收到一個時間窗口的代碼以在時間窗口中啓動腳本。 如果時間確定,它會打印True,如果時間窗口之外打印False。 這工作正常。如何用時間窗口編碼,如果

現在在腳本的第二部分,這隻能如果時間窗口是 True和輸入if pfd.input_pins[0].value == 1 and not testprocess:True執行。 但是,如果我運行腳本,即使時間窗口不是True,它也會執行它。請幫忙嗎?

#!/usr/bin/python 

import datetime 
import subprocess 
from subprocess import Popen 
import pifacedigitalio 
from time import sleep 
pfd = pifacedigitalio.PiFaceDigital() # creates a PiFace Digital object 
testprocess = None 
now = datetime.datetime.now() 

if ((now.hour >= 14 and now.minute >=00) and (now.hour < 15)) or ((now.hour >=14) and (now.hour < 15)): 

    print(True) 
else: 
    print(False) 


if pfd.input_pins[0].value == 1 and not testprocess: 
    subprocess.Popen(["/bin/myscriptxy"]) 
    testprocess = Popen(["/bin/my script"]) 
    sleep(1) 
if pfd.input_pins[0].value == 0: 
    if testprocess: 
     testprocess.kill() 
     testprocess = None 
     subprocess.Popen(["/bin/myscriptxy"]) 
     sleep(1) 

回答

1

如果你想你的第二個代碼塊只有在第一部分的條件評價爲真要執行,你基本上有兩種可能性:

  • 要麼,中移動你的第二個代碼塊該if塊的身體

    if ((now.hour >= 14 and now.minute >=00) and (now.hour < 15)) or ((now.hour >=14) and (now.hour < 15)): 
        if pfd.input_pins[0].value == 1 and not testprocess: 
         ... 
    
  • 或者存儲在一個變量的第一條件的結果,並檢查該變量在第二CON dition:

    time_okay = ((now.hour >= 14 and now.minute >=00) and (now.hour < 15)) or ((now.hour >=14) and (now.hour < 15)) 
    
    if time_okay and pfd.input_pins[0].value == 1 and not testprocess: 
        ... 
    

而且,好像你的時間窗口條件可以顯著簡化。首先,除非有一些非常奇怪的邊緣情況,我不知道,now.minute >=00總是爲真。但是,這並不甚至無所謂,因爲你正在測試(A and B and C) or (A and C)(與Cnow.minute >=00),它可以簡化爲A and C,即

(now.hour >= 14) and (now.hour < 15) 

可以進一步運用比較鏈接,以14 <= now.hour < 15被簡化。

相關問題