2017-10-14 4 views
0

Ich baue ein Wecker-Projekt. Kann mir jemand sagen, wie man ein Skript schreibt, um alle anderen Skripte aufzurufen? Zum Beispiel habe ich drei Skripte auf meiner Himbeer-Pi namens LCDTESTFORPI.py, eine andere namens "ex_7segmentLED.py" und eine dritte namens "alarmmpi.py". Was ich möchte, ist in der Lage zu sein, ein Skript namens "alarmpi_init.py" auszuführen, das alle anderen Skripte ausführen würde, und könnte dann so eingestellt werden, dass es beim Start ausgeführt wird. Ich weiß, dass es möglich ist, ich weiß einfach nicht, wie man es schreibt.Schreiben eines Skripts zum Ausführen mehrerer Skripts in Python

Zuvor wurde vorgeschlagen, dass ich statt dessen das richtige Format verwenden sollte, indem ich all diese Funktionen in ein Skript einfüge, aber ich weiß nicht, wie ich das machen soll.

Unten finden Sie eine Kopie der genannten Codes:

LCDTESTFORPI.py

#!/usr/bin/python 
# 
# HD44780 20x4 RGB LCD Test Script for 
# Raspberry Pi 
# 
# Adapted by: Kyle Prier 
# Site: http://wwww.youtube.com/meistervision 
# 
# Original Author : Matt Hawkins 
# Site : http://www.raspberrypi-spy.co.uk/ 
# 
# Date : 09/08/2012 
# 

# The wiring for the LCD is as follows: 
# 1 : GND 
# 2 : 5V 
# 3 : Contrast (0-5V)* 
# 4 : RS (Register Select) 
# 5 : R/W (Read Write)  - GROUND THIS PIN! We do not want the LCD to send anything to the Pi @ 5v 
# 6 : Enable or Strobe 
# 7 : Data Bit 0    - NOT USED 
# 8 : Data Bit 1    - NOT USED 
# 9 : Data Bit 2    - NOT USED 
# 10: Data Bit 3    - NOT USED 
# 11: Data Bit 4 
# 12: Data Bit 5 
# 13: Data Bit 6 
# 14: Data Bit 7 
# 15: LCD Backlight +5V 
# 16: LCD Backlight GND (Red) 
# 17: LCD Backlight GND (Green) 
# 18: LCD Backlight GND (Blue) 

#import 
import RPi.GPIO as GPIO 
import time 

# Define GPIO to LCD mapping 
LCD_RS = 25 
LCD_E = 24 
LCD_D4 = 23 
LCD_D5 = 17 
LCD_D6 = 27 
LCD_D7 = 22 


# Define some device constants 
LCD_WIDTH = 20 # Maximum characters per line 
LCD_CHR = True 
LCD_CMD = False 

LCD_LINE_1 = 0x80 # LCD RAM address for the 1st line 
LCD_LINE_2 = 0xC0 # LCD RAM address for the 2nd line 
LCD_LINE_3 = 0x94 # LCD RAM address for the 3rd line 
LCD_LINE_4 = 0xD4 # LCD RAM address for the 4th line 

# Timing constants 
E_PULSE = 0.0005 
E_DELAY = 0.0005 

daynames = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"] 
monthnames = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"] 

def ordinal(value): 
    try: 
     value = int(value) 
    except ValueError: 
     return value 

    if value % 100//10 != 1: 
     remainder = value % 10 
     if remainder == 1: 
      ordval = u"%d%s" % (value, "st") 
     elif remainder == 2: 
      ordval = u"%d%s" % (value, "nd") 
     elif remainder == 3: 
      ordval = u"%s%s" % (value, "rd") 
     else: 
      ordval = u"%d%s" % (value, "th") 
    else: 
     ordval = u"%d%s" % (value, "th") 
    return ordval 

def main(): 
    # Main program block 
    GPIO.setwarnings(False) 
    GPIO.setmode(GPIO.BCM)  # Use BCM GPIO numbers 
    GPIO.setup(LCD_E, GPIO.OUT) # E 
    GPIO.setup(LCD_RS, GPIO.OUT) # RS 
    GPIO.setup(LCD_D4, GPIO.OUT) # DB4 
    GPIO.setup(LCD_D5, GPIO.OUT) # DB5 
    GPIO.setup(LCD_D6, GPIO.OUT) # DB6 
    GPIO.setup(LCD_D7, GPIO.OUT) # DB7 

    # Initialise display 
    lcd_init() 


    # Send some centred test 
    lcd_byte(LCD_LINE_1, LCD_CMD) 
    lcd_string("--------------------",2) 
    lcd_byte(LCD_LINE_2, LCD_CMD) 
    lcd_string("AlarmPi Mk2",2) 
    lcd_byte(LCD_LINE_3, LCD_CMD) 
    lcd_string("Starting up...",2) 
    lcd_byte(LCD_LINE_4, LCD_CMD) 
    lcd_string("--------------------",2)  

    time.sleep(5) # 5 second delay 

    while True: 
    lcd_byte(LCD_LINE_1, LCD_CMD) 
    lcd_string("Wakey Wakey!",2) 
    lcd_byte(LCD_LINE_2, LCD_CMD) 
    lcd_string(time.strftime("%H:%M:%S"),2) 
    lcd_byte(LCD_LINE_3, LCD_CMD) 
    day_index = int(time.strftime("%w")) 
    lcd_string(daynames[day_index],2) 
    lcd_byte(LCD_LINE_4, LCD_CMD) 
    mon_index = int(time.strftime("%m")) 
    lcd_string(ordinal(int(time.strftime("%d"))) + " " + monthnames[mon_index] + " " + time.strftime("%Y"),2) 
    time.sleep(1) 

    time.sleep(30) # 30 second delay 

    # Clear display 
    lcd_byte(LCD_LINE_1, LCD_CMD) 
    lcd_string("",3) 
    lcd_byte(LCD_LINE_2, LCD_CMD) 
    lcd_string("",3) 
    lcd_byte(LCD_LINE_3, LCD_CMD) 
    lcd_string("",2) 
    lcd_byte(LCD_LINE_4, LCD_CMD) 
    lcd_string("",2)  

    time.sleep(3) # 3 second delay 


def lcd_init(): 
    # Initialise display 
    lcd_byte(0x33,LCD_CMD) 
    lcd_byte(0x32,LCD_CMD) 
    lcd_byte(0x28,LCD_CMD) 
    lcd_byte(0x0C,LCD_CMD) 
    lcd_byte(0x06,LCD_CMD) 
    lcd_byte(0x01,LCD_CMD) 

def lcd_string(message,style): 
    # Send string to display 
    # style=1 Left justified 
    # style=2 Centred 
    # style=3 Right justified 

    if style==1: 
    message = message.ljust(LCD_WIDTH," ") 
    elif style==2: 
    message = message.center(LCD_WIDTH," ") 
    elif style==3: 
    message = message.rjust(LCD_WIDTH," ") 

    for i in range(LCD_WIDTH): 
    lcd_byte(ord(message[i]),LCD_CHR) 

def lcd_byte(bits, mode): 
    # Send byte to data pins 
    # bits = data 
    # mode = True for character 
    #  False for command 

    GPIO.output(LCD_RS, mode) # RS 

    # High bits 
    GPIO.output(LCD_D4, False) 
    GPIO.output(LCD_D5, False) 
    GPIO.output(LCD_D6, False) 
    GPIO.output(LCD_D7, False) 
    if bits&0x10==0x10: 
    GPIO.output(LCD_D4, True) 
    if bits&0x20==0x20: 
    GPIO.output(LCD_D5, True) 
    if bits&0x40==0x40: 
    GPIO.output(LCD_D6, True) 
    if bits&0x80==0x80: 
    GPIO.output(LCD_D7, True) 

    # Toggle 'Enable' pin 
    time.sleep(E_DELAY)  
    GPIO.output(LCD_E, True) 
    time.sleep(E_PULSE) 
    GPIO.output(LCD_E, False) 
    time.sleep(E_DELAY)  

    # Low bits 
    GPIO.output(LCD_D4, False) 
    GPIO.output(LCD_D5, False) 
    GPIO.output(LCD_D6, False) 
    GPIO.output(LCD_D7, False) 
    if bits&0x01==0x01: 
    GPIO.output(LCD_D4, True) 
    if bits&0x02==0x02: 
    GPIO.output(LCD_D5, True) 
    if bits&0x04==0x04: 
    GPIO.output(LCD_D6, True) 
    if bits&0x08==0x08: 
    GPIO.output(LCD_D7, True) 

    # Toggle 'Enable' pin 
    time.sleep(E_DELAY)  
    GPIO.output(LCD_E, True) 
    time.sleep(E_PULSE) 
    GPIO.output(LCD_E, False) 
    time.sleep(E_DELAY) 

if __name__ == '__main__': 
    main() 

GPIO.cleanup() 

Hier eine Kopie des ex_7segmentclock.py ist

#!/usr/bin/python 

import time 
import datetime 

from Adafruit_LED_Backpack import SevenSegment 

# =========================================================================== 
# Clock Example 
# =========================================================================== 
segment = SevenSegment.SevenSegment(address=0x70) 

# Initialize the display. Must be called once before using the display. 
segment.begin() 

print "Press CTRL+Z to exit" 

# Continually update the time on a 4 char, 7-segment display 
while(True): 
    now = datetime.datetime.now() 
    hour = now.hour 
    minute = now.minute 
    second = now.second 

    segment.clear() 
    # Set hours 
    segment.set_digit(0, int(hour/10))  # Tens 
    segment.set_digit(1, hour % 10)   # Ones 
    # Set minutes 
    segment.set_digit(2, int(minute/10)) # Tens 
    segment.set_digit(3, minute % 10)  # Ones 
    # Toggle colon 
    segment.set_colon(second % 2)    # Toggle colon at 1Hz 

    # Write the display buffer to the hardware. This must be called to 
    # update the actual display LEDs. 
    segment.write_display() 

    # Wait a quarter second (less than 1 second to prevent colon blinking getting$ 
    time.sleep(0.25) 

Leider kann ich nicht die anderen beiden bekommen Code-Dateien zu öffnen, wie eine ist eine .config-Datei und der andere wird derzeit von einem Gerät in einem anderen Teil des Landes ausgeführt. Aber die beiden gezeigten Codedateien sind die beiden, mit denen ich für diesen Beitrag arbeiten möchte.

+0

@downvoters: Wird nachdrücklich empfohlen, Marks hat geschrieben schließlich hier seine Botschaft von der Raspberry Pi SE so, nachdem sie. Also bitte unterlassen Sie erneut Sanktionierung und Hilfe! –

+0

@Nasha Vielen Dank Nasha sehr nett - Entschuldigung für die vorherige! –

Antwort

0

Wenn alle Dateien im selben Verzeichnis befinden, könnte dies eine mögliche Implementierung von alarmpi_init.py sein:

import LCDTESTFORPI 
LCDTESTFORPI.main() 

import ex_7segmentLED 
import alarmpi 

Diese alle drei Skripte in dieser Reihenfolge ausgeführt werden. Beachten Sie, dass Skripte mit if __name__ == '__main__' einen expliziten Aufruf ihrer Hauptmethode erfordern, während Skripte ohne diesen Abschnitt ohne sie ausgeführt werden können.

0

Haben Sie versucht, so etwas wie eine Datei alarm_init.sh mit genannt erstellen:

#!/bin/bash 
cd /my/working/directory/ 
./script1.py # you can add arguments space separated. 
./script2.py 
./script3.py 
Verwandte Themen