首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Raspberry上Python中的错误文件描述符错误(错误9)

Raspberry上Python中的错误文件描述符错误(错误9)
EN

Stack Overflow用户
提问于 2015-05-18 19:59:10
回答 1查看 2.7K关注 0票数 1

我第一次使用Python,并在Raspberry版本B+ rev 2上运行时遇到了以下问题:

该代码应该在pin 22 (BCM)上设置一个中断,当按下按钮时,停止操作系统:

代码语言:javascript
复制
    # Import the modules to send commands to the system and access GPIO pins
from subprocess import call
import RPi.GPIO as gpio

# Define a function to keep script running
def loop():
    raw_input()


# Define a function to run when an interrupt is called
def shutdown(pin):
    call('halt', shell=False)

gpio.setmode(gpio.BCM) # Set pin numbering to BCM numbering
gpio.setup(22, gpio.IN) # Set up pin 22 as an input
gpio.add_event_detect(22, gpio.RISING, callback=shutdown, bouncetime=200) # Set up an interrupt to look for button presses


loop() # Run the loop function to keep script running

当我这样称呼它时,程序运行得很好:

代码语言:javascript
复制
python program.py

但如果我把它放在这样的背景里:

代码语言:javascript
复制
python program.py &

它可以正常工作,直到我执行任何其他命令(可以是任何东西)。一次总付)然后它就停止了(但并没有杀死它)。

我做了一个新的输出,这就是我所拥有的:

代码语言:javascript
复制
Traceback (most recent call last):
  File "haltButton.py", line 19, in <module>
    loop() # Run the loop function to keep script running
  File "haltButton.py", line 7, in loop
    raw_input()
IOError: [Errno 9] Bad file descriptor

谁能给我指出正确的方向吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-18 20:02:46

后台程序不能执行raw_input()。这就是后台程序的全部意义:您放弃用户输入,以便shell (或其他程序)能够运行并处理它。

如果你只想在信号发出之前永远运行,那就找一种不同的方法。除了raw_input,几乎任何东西都能工作。例如,您可以在time.sleep上循环,或者在某些fd上循环select.select,或者除了尝试从关闭的fd中读取之外,您还可以想到其他任何东西。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30311810

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档