簡體   English   中英

如何同時運行三個帶有聲音的“.py”文件?

[英]How to run three ".py" files with sound concurrently?

首先,我的英語可能很笨拙。 對不起。
我有一個 pi 零 w。
樹莓派開機后,有3個.py文件自動運行。
但有一些問題。

A.py , B.py , C.py

這三個都可以使用mpg123播放聲音。
AB正在等待每個按鈕輸入,而C繼續作為傳感器工作。
C ,聲音繼續,如果在AB按下按鈕,則殺死C並使其恢復生機。

問題:

  1. 如果我使用python ~.py &並嘗試運行另一個.py,則返回后台的.py 的聲音不起作用,並且該文件的功能不起作用。 但是,如果我使用ps -ef檢查,則該文件還活着。

    確切地說,它在mpg123命令處停止。 mpg123基本信息出來了,然后不播放了,然后.py就停止了。

  2. 我把殺掉C.py的代碼放在A.py或者B.py ,工作完成后再次保存,但是第二次操作就斷了。

當按下 A 和 B 按鈕時,我只希望 C 的 mpg123 安靜。 我希望 C 在 A 和 B 結束時工作。

代碼A.py - email_send


import subprocess
from subprocess import call


def sendmail():
  now_ip = call(["hostname", "-I"])
  myip = now_ip + "~"
  call(["wget", "-O", "test_img.jpeg", myip])
  

try:
 while True:
  if GPIO~ A button Push:
    call(["pkill","-9","-ef","C.py"])
    call(["pkill","-9","-ef","C.mp3"])
    subprocess.Popen(["mpg123", "A.mp3"])
    sendMail()
    call(["python","C.py"])
except

代碼B.py - 數據發送

# Similar to A

代碼C.py - i2c

import subprocess import call

while True:
 if 0<~<100:
   call(["mpg123", "C.mp3"])

單獨運行是沒有問題的,但是如果用nohup或者&一起運行,就會壞掉。

當按下 A.py 和 B.py 的按鈕或任務完成時,我想通過向 C.py 發出信號來停止聲音。 我心里明白,但我不知道為什么。

我怎樣才能做到這一點?

感謝他。
這並不完美,因為我的第一個多線程,但我正在尋找的解決方案是正確的。

import RPi.GPIO as GPIO
import sys
import signal
import time
from email_test import sendMail
from razer_test import runtof
import subprocess
from subprocess import call
import threading

GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
push_red = 22
push_white = 23
GPIO.setup(push_red, GPIO.IN)
GPIO.setup(push_white, GPIO.IN)

email_flag = 0 # control flag for Problem 1.
main_flag = 0 

def Mail(self):
    global email_flag
    while True:
        if GPIO.input(push_red) == 0:
                email_flag = 1
                subprocess.Popen(["mpg123", "Email_voice.mp3"])
                sendMail() #code A.py
                email_flag = 0
        time.sleep(0.1)

def razer(self):
    global email_flag
    global main_flagg
    runtof(email_flag,main_flag) #code C.py

thread_Mail = threading.Thread(target=Mail)
thread_Mail.start()
thread_razer = threading.Thread(target=razer)
thread_razer.start()
'''

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM