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

Raspberry上的Python文件描述符错误(错误9),python,linux,raspberry-pi,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 run

我第一次使用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 &
但如果我把它放在这样的背景中:

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

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

后台程序不能进行原始输入。这就是作为后台程序的全部意义:您放弃用户输入,以便shell或其他程序可以运行和处理它


如果你只想一直跑到发出信号为止,那就找一种不同的方法。除了原始输入,几乎任何东西都可以工作。例如,您可以在某个fd上循环.sleep或select.select,或者除了尝试读取您关闭的fd之外您可以想到的任何其他内容。

哦,我现在明白了,谢谢!另一个问题是:time.sleep与while循环一起工作,对吗?因此,它破坏了中断而不是不断检查GPIO引脚的while循环的全部目的。@WilhelmSorban:time.sleep与while循环不起作用,它的工作原理是要求内核在接下来的1秒或更长的时间内根本不运行您的程序,除非有信号。@WilhelmSorban:,这与raw_输入没有太大区别,它包括对标准输入的阻塞读取调用,它告诉内核在文件描述符上有内容可读取之前,不要运行程序,除非有信号。