PIPE会阻止父进程吗?

时间:2016-09-14 20:07:47

标签: python subprocess multiprocessing

我有一个像这样的python模块:

from subprocess import *

cmdline = 'python example.py'

result = Popen(cmdline,shell=False,stdout=PIPE,stderr=PIPE,stdin=PIPE).stdout

我希望父进程阻塞,直到子进程完成执行,父进程可以接收子进程的输出。上面的代码是否符合我的目的?根据我的理解,子进程将其输出发送到PIPE而不是STDOUT,并且父进程将阻塞,直到子进程退出并且PIPE关闭。有人可以解释我被误解的地方吗?

另一件事是沟通或check_output返回一个字节字符串,但我想逐行处理结果,有没有好办法呢?

2 个答案:

答案 0 :(得分:0)

而不是做

result = Popen(cmdline,shell=False,stdout=PIPE,stderr=PIPE,stdin=PIPE).stdout`

你应该这样做:

 stdout, stderr = Popen(cmdline,shell=False,stdout=PIPE,stderr=PIPE,stdin=PIPE).communicate()

stdout是您希望的resultstderr是进程写错误输出的地方。

答案 1 :(得分:0)

不,你所做的是创建一个名为- (void)configureForApplicationWillResignActive { [_locationManager setAllowsBackgroundLocationUpdates:YES]; [_locationManager setPausesLocationUpdatesAutomatically:NO]; [_locationManager setDesiredAccuracy:kCLLocationAccuracyBest]; [_locationManager setDistanceFilter:kCLDistanceFilterNone]; // use distance filter [_locationManager requestAlwaysAuthorization]; } - (void)configureForApplicationDidBecomeActive { [_locationManager setAllowsBackgroundLocationUpdates:YES]; [_locationManager setPausesLocationUpdatesAutomatically:NO]; [_locationManager setDesiredAccuracy:kCLLocationAccuracyBest]; [_locationManager setDistanceFilter:kCLDistanceFilterNone]; // use distance filter [_locationManager requestAlwaysAuthorization]; } 的{​​{1}}对象。您需要致电Popen或更优先result。有关此Here

的更多信息