我有一个像这样的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返回一个字节字符串,但我想逐行处理结果,有没有好办法呢?
答案 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
是您希望的result
。 stderr
是进程写错误输出的地方。
答案 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