Raspberry Pi WiFi无线电脚本问题

2024-10-03 11:25:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我遇到了一个问题,由于我对Python不太了解,所以我希望其他人能帮助我理解我的问题所在。在

我正在制造一台便携式无线收音机。Raspberry Pi利用Pianobar访问Pandora服务器,登录我的帐户,获取我的电台,然后开始播放第一个。在

我遵循官方的Adafruit指南:https://learn.adafruit.com/pi-wifi-radio/overview

我一直跟着向导一直走到皮亚诺巴开始工作。我可以从命令行运行“pianobar”。它在不到10秒的时间内连接并开始播放音乐。在

但是,当我启动允许16x2 LCD键盘与pianobar接口的脚本时,它不起作用。在

更具体地说,它贯穿了脚本的前半部分。LCD显示IP地址并显示“正在检索站列表…”。10秒后,脚本将退出所有这些。在

pi@pandora ~/Python-WiFi-Radio $ sudo python PiPhi.py

Spawning pianobar...
Receiving station list...
Traceback (most recent call last):
  File "PiPhi.py", line 288, in <module>
    stationList, stationIDs = getStations()
  File "PiPhi.py", line 190, in getStations
    pianobar.expect('Select station: ', timeout=10)
  File "/usr/local/lib/python2.7/dist-packages/pexpect.py", line 1311, in expect
    return self.expect_list(compiled_pattern_list, timeout, searchwindowsize)
  File "/usr/local/lib/python2.7/dist-packages/pexpect.py", line 1325, in expect_list
    return self.expect_loop(searcher_re(pattern_list), timeout, searchwindowsize)
  File "/usr/local/lib/python2.7/dist-packages/pexpect.py", line 1409, in expect_loop
    raise TIMEOUT (str(e) + '\n' + str(self))
pexpect.TIMEOUT: Timeout exceeded in read_nonblocking().
<pexpect.spawn object at 0xb6b305b0>
version: 2.3 ($Revision: 399 $)
command: /usr/bin/sudo
args: ['/usr/bin/sudo', '-u', 'pi', 'pianobar']
searcher: searcher_re:
    0: re.compile("Select station: ")
TIME: -03:35/03:43
TIME: -03:35/03:43
after: <class 'pexpect.TIMEOUT'>
match: None
match_index: None
exitstatus: None
flag_eof: False
pid: 2315
child_fd: 5
closed: False
timeout: 30
delimiter: <class 'pexpect.EOF'>
logfile: None
logfile_read: None
logfile_send: None
maxread: 2000
ignorecase: False
searchwindowsize: None
delaybeforesend: 0.05
delayafterclose: 0.1
delayafterterminate: 0.1

pi@pandora ~/Python-WiFi-Radio $ 

http://pastebin.com/6Lm3dTwx-这是我要运行的脚本

从我的基本知识来看,它似乎比任何超时都要花更长的时间来检索站点列表。我完全迷路了,请帮帮我。谢谢!在


Tags: inpy脚本noneusrlinetimeoutpi
3条回答

这里可能有两个问题。我很难产生这个过程。这在中显示为EOF错误皮亚诺巴例外对于“获取电台…确定。\r\n”。要查看发生了什么,请处理EOF异常并打印皮亚诺巴之前:

# Launch pianobar as pi user (to use same config data, etc.) in background: print('Spawning pianobar...') pianobar = pexpect.spawn('sudo -u pi /home/pi/pianobar/pianobar', timeout=60) print('Receiving station list...') expectIdx = pianobar.expect(['Get stations... Ok.\r\n', pexpect.EOF, pexpect.TIMEOUT]) if expectIdx == 0: stationList, stationIDs = getStations() try: # Use station name from last session stationNum = stationList.index(defaultStation) except: # Use first station in list stationNum = 0 print 'Selecting station ' + stationIDs[stationNum] pianobar.sendline(stationIDs[stationNum]) elif expectIdx == 1: # EOF print 'pianobar.expect EOF error' print pianobar.before # shows response from pianobar spawn pianobar.kill(0) elif expectIdx == 2: # TIMEOUT print 'pianobar.expect TIMEOUT error' pianobar.kill(0)
和13;
和13;

我通过指定pianobar的完整路径解决了我的问题(如上所示)。在

第二个问题可能是因为pianobar配置中有一个有效的默认工作站。如果在这种情况下,启动时没有显示“选择电台”列表,则需要请求它。此错误显示在皮亚诺巴。期待在getStations()中。我通过在初始请求超时时请求站点列表来解决这个问题:

和13;
和13;

我发现用户名“pi”是硬编码的琵琶.py! 改变 第33行(PICKLEFILE),286(pepect.spawn公司('sudo-u pi。。。 解决了我的问题。。在

希望这有帮助。。在

我也遇到了同样的问题,为了解决一个低技术的问题,我在启动脚本中ping了google 10次。这给了系统足够长的时间来稳定网络连接。在

相关问题 更多 >