从python模块同时运行两个子进程

时间:2014-06-18 21:07:27

标签: python-2.7 raspberry-pi

我试图从覆盆子pi上的python模块同时执行两个子进程。目前第二个进程必须等待第一个进程在它开始之前完成,但我想知道是否有办法让它们同时启动。正在读取的数据每5秒钟就会产生一行,而两个.sh程序每次完成的时间不会超过一秒。如果您对如何正确地执行此操作有任何建议,或者如果有解决方法,将非常感谢。代码如下:

f = open("testv1.txt", "a")
import serial
import subprocess
ser = serial.Serial('/dev/ttyACM0', 115200)
while 1:
    x= ser.readline()
    subprocess.call(['./camera1.sh'],shell=True)
    subprocess.call(['./camera2.sh'],shell=True)
    print(x)
    f.write(str(x))

所以我改变了代码,现在它改为:

cam1 = subprocess.Popen("./camera1.sh")
cam2 = subprocess.Popen("./camera2.sh")

但现在我收到以下错误:

Traceback (most recent call last):
  File "/home/pi/Desktop/Doyle/CaptureV1/testv1.py", line 7, in <module>
    cam1 = subprocess.Popen("./camera1.sh")
  File "/usr/lib/python2.7/subprocess.py", line 679, in __init__
    errread, errwrite)
  File "/usr/lib/python2.7/subprocess.py", line 1259, in _execute_child
    raise child_exception
OSError: [Errno 8] Exec format error

关于如何修复它的任何其他建议?

1 个答案:

答案 0 :(得分:1)

您需要使用在新进程中执行子程序的Popen构造函数。通过这种方式,您实际上可以让两个线程同时执行某些操作。

尝试类似:

###someCode

cam1 = subprocess.Popen("./camera1.sh")
cam2 = subprocess.Popen("./camera2.sh")

###othercode

小心正确管理线程。在此调用之后,检查子进程是否已终止方法poll()或等待是一件好事:

cam1.wait() #wait until the child terminates
cam1.poll() #return the status of the child process.