import urllib.request
from bs4 import BeautifulSoup
import urllib
import RPi.GPIO as GPIO
import time
import os
import sys
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
light_1 = 5
GPIO.setup(light_1, GPIO.OUT)
GPIO.output(light_1, 0)
req = urllib.request.urlopen("http://lapi.transitchicago.com/api/1.0/ttpositions.aspx?key=6b78297846g28427e4359b886742561183677876&rt=red,blue,G,pink,Brn,Org,P,Y")
content = BeautifulSoup(req, 'xml')
def Red(xml):
train_1 = xml.find('rn')
trainStation = xml.find('nextStaNm')
trainApp = xml.find('isApp')
direction = xml.find('destNm')
if trainApp.text == '1':
print('Train number '+ train_1.text + ' RED line train to',direction.text,'is now approching ' + trainStation.text)
time.sleep(1)
GPIO.output(light_1, True)
else:
print('There is no train arriving yet at '+ trainStation.text)
GPIO.output(light_1, False)
time.sleep(1)
def Blue(xml):
train_2 = xml.select_one('route[name="blue"] train rn').get_text()
TrainStation = xml.select_one('route[name="blue"] train nextStaNm').get_text()
TrainApp= xml.select_one('route[name="blue"] train isApp').get_text()
direction= xml.select_one('route[name="blue"] train destNm').get_text()
if TrainApp == '1':
print('Train number '+ train_2 + ' BLUE line train to',direction,'is now
approching ' + TrainStation)
else:
print('There is no train arriving yet at '+ TrainStation)
def Green(xml):
train_3 = xml.select_one('route[name="g"] train rn').get_text()
TrainStation = xml.select_one('route[name="g"] train nextStaNm').get_text()
TrainApp= xml.select_one('route[name="g"] train isApp').get_text()
direction= xml.select_one('route[name="g"] train destNm').get_text()
if TrainApp == '1':
print('Train number '+ train_3 + ' GREEN line train to',direction,'is now approching ' + TrainStation)
else:
print('There is no train arriving yet at '+ TrainStation)
def Pink(xml):
train_4 = xml.select_one('route[name="pink"] train rn').get_text()
TrainStation = xml.select_one('route[name="pink"] train nextStaNm').get_text()
TrainApp= xml.select_one('route[name="pink"] train isApp').get_text()
direction= xml.select_one('route[name="pink"] train destNm').get_text()
if TrainApp == '1':
print('Train number '+ train_4 + ' PINK line train to',direction,'is now approching ' + TrainStation)
else:
print('There is no train arriving yet at '+ TrainStation)
def Brown(xml):
train_5 = xml.select_one('route[name="brn"] train rn').get_text()
TrainStation = xml.select_one('route[name="brn"] train
nextStaNm').get_text()
TrainApp= xml.select_one('route[name="brn"] train isApp').get_text()
direction= xml.select_one('route[name="brn"] train destNm').get_text()
if TrainApp == '1':
print('Train number '+ train_5 + ' BROWN line train to',direction,'is now approching ' + TrainStation)
else:
print('There is no train arriving yet at '+ TrainStation)
def Orange(xml):
train_6 = xml.select_one('route[name="org"] train rn').get_text()
TrainStation = xml.select_one('route[name="org"] train nextStaNm').get_text()
TrainApp= xml.select_one('route[name="org"] train isApp').get_text()
direction= xml.select_one('route[name="org"] train destNm').get_text()
if TrainApp == '1':
print('Train number '+ train_6 + ' ORANGE line train to',direction,'is now approching ' + TrainStation)
else:
print('There is no train arriving yet at '+ TrainStation)
def Purple(xml):
train_7 = xml.select_one('route[name="p"] train rn').get_text()
TrainStation = xml.select_one('route[name="p"] train nextStaNm').get_text()
TrainApp= xml.select_one('route[name="p"] train isApp').get_text()
direction= xml.select_one('route[name="p"] train destNm').get_text()
if TrainApp == '1':
print('Train number '+ train_7 + ' PURPLE line train to',direction,'is now approching ' + TrainStation)
else:
print('There is no train arriving yet at '+ TrainStation)
def Yellow(xml):
train_8 = xml.select_one('route[name="y"] train rn').get_text()
TrainStation = xml.select_one('route[name="y"] train nextStaNm').get_text()
TrainApp= xml.select_one('route[name="y"] train isApp').get_text()
direction= xml.select_one('route[name="y"] train destNm').get_text()
if TrainApp == '1':
print('Train number '+ train_8 + ' YELLOW line train to',direction,'is now approching ' + TrainStation)
else:
print('There is no train arriving yet at '+ TrainStation)
if __name__=='__main__':
Red(content)
Blue(content)
Green(content)
Pink(content)
Brown(content)
Orange(content)
Purple(content)
## Yellow(content)
os.execv(__file__, sys.argv)
我的目标是使这个代码能够自我运行并继续自我更新,所以我认为这种方法可以工作(在底部),但是当我运行它时,它会给我[Errno 13]Permisson denied。。。不知道出了什么问题。但如果有人有解决办法或其他方法,我愿意提出其他建议。你知道吗
我只想让这段代码自己运行并继续更新。好像我每次都在跑步。不是一段时间。你知道吗
为了能够执行一个文件,它必须设置execute位(
chmod +x your_file.py
)。此外,由于它是一个脚本,因此需要将脚本的第一行设为shebang:正如我在评论中提到的,你真的不需要执行自己。你应该这样做:
有几分钟的时间,所以我重构了你的代码。你有很多重复的逻辑。使你很难推理什么时候发生了什么以及如何重复你的过程。我提取了GPIO内容,请求API,并将XML中的状态提取到单独的函数中。我还为线条颜色引入了
Enum
,为状态引入了namedtuple
,使事情变得更加明显:显然,我不能测试这个,但是像上面这样的东西肯定可以工作(每5秒打印一次新数据,给定或获取API响应时间)。你知道吗
相关问题 更多 >
编程相关推荐