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

时间:2015-05-18 19:59:10

标签: python linux raspberry-pi

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

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

    # 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

当我这样打电话时程序运行正常:

python program.py

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

python program.py &

它工作正常,直到我做任何其他命令(可以是任何东西(例如ls))。 然后它停止(但不会杀死它)。

我做了一个nohup输出,这就是我的内容:

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

有人可以指出我正确的方向吗?

1 个答案:

答案 0 :(得分:3)

后台程序无法执行raw_input()。这就是后台程序的重点:放弃用户输入,以便shell(或其他程序)可以运行并处理它。

如果您只是希望在发出信号之前永远运行,只需找到一种不同的方式。几乎任何都可以使用,raw_input除外。例如,您可以在某些fd或其他任何您能想到的内容上循环time.sleepselect.select,除非您尝试从已关闭的fd中进行读取。