2014-06-18 73 views
2

两个同时运行的子过程,我试图在同一时间从一个树莓派一个Python模块执行两个子进程。目前第二个过程必须等待第一个过程完成,但我想知道是否有办法让它们同时启动。正在读取的数据仅在每5秒钟给出一行,而两个.sh程序每次完成时间不会超过一秒。如果您对如何正确执行此操作有任何建议,或者有任何建议,我们将不胜感激。代码如下:从Python模块

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

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

尝试类似:

###someCode 

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

###othercode 

小心正确管理线程。这一呼吁之后,这是一件好事),以检查是否子进程已经终止蒙山方法调查(或等待:

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

我太累了,它仍然是不工作我收到以下错误消息 – user3754203

+0

如果这个命令不起作用并引发OSError,请尝试使用Popen函数中的shell = True选项。如果不起作用,你使用的是什么Python版本,你的bash脚本是否正确? – GiulioG

+0

shell = True解决了这个问题,谢谢你对我的问题的帮助 – user3754203