communicatepython
A. python Popen communicate 和wait使用上的区别
使用 subprocess 模块的 Popen 调用外部程序,如果
stdout 或 stderr 参数是 pipe,并且程序输出超过操作系统的 pipe size时,如果使用
Popen.wait() 方式等待程序结束获取返回值,会导致死锁,程序卡在wait() 调用上。
B. python 调用subprocess communicate
方法 string dir = basename(fullPath); if(!_fileUtils->isDirectoryExist(dir)) { if(!_fileUtils->createDirectory(dir)) { // Failed to create directory CCLOG("AssetsManagerEx : can not create directory %s\n", fullPath.c_str()); un...
C. Python Popen communicate 和wait使用上的区别
开机按F1才能进入(启动)系统的解决方法
1、BIOS ROM check sum error,System halted
(BIOS信息进行总和校验时发现错误,系统锁定)
解决方案:这个错误是一般人不会遇到的,这种信息多半是对主板BIOS刷新不完整才会出现的,惟一的处理方式就是重新刷新BIOS,但不能保证一定成功。
2、CMOS battery failed
(CMOS电池失效)
解决方案:这说明CMOS电池已经没电了,只要将主板上的钮扣电池取下,换一块新电池即可。大部分主板都是使用3V的钮扣电池,你可别将5V的电池买回来哦!你只要仔细查看电池的表面就可以清楚地看到上面标示“3V”的字样。
3、CMOS check sum error-Defaults loaded
(CMOS执行全部检查时发现错误,要载入系统预设值)
解决方案:这种情况通常是因为电池电力不足所造成,建议先换个电池看看。如果问题还是没有解决,那么说明CMOS RAM可能而问题,因为CMOS RAM我们个人是无法维修的,如果主板还在保修期内请联系主板厂商或购买地的经销商处理。
4、Display switch is set incorrectly
(显示开关配置错误)
解决方案:只要你的主板不是老掉牙的,就肯定不会出现这个信息。一般来说,老主板上有一个路线用来设置屏幕为单色或彩色。出现此信息表示主板上的设定和CMOS设置不一致,所以只要判断主板和CMOS设置谁为正确,然后更新错误的设置即可。
5、Floppy disk(s) fail或Floppy disk(s) fail (80)或Floppy disk(s) fail (40)
(软驱检测失败)
解决方案:应检查软驱的数据线是否已正确连接,看看有没有反接或松脱。别告诉我,电源插头没有接上哦!如果没有软驱的话,建议在CMOS Setup程序中将“Drive A”设置为“None”。建议找个好软驱来试接一下。以证明原来的软驱是否有问题。
6、Hard disk(s) diagnosis fail
(执行硬盘诊断时发生错误)
解决方案:出现这个信息一般就是说硬盘本身出现故障了。你可以把硬盘接到别的电脑上试试看。如果问题还是没有解决,那可能是这块硬盘出现严重的物理故障了。
7、Hard disk(s) install failure
(硬盘安装失败)
解决方案:检查硬盘的电源线或数据线是否正确接上。如果同一条IDE数据线上持接两个IDE设备的跳线设置都一样的话,只要将这两个IDE设备的跳线设置不一样即可(一般将主硬盘设为Master,另一个设为Slave)。
8、Hard disk(s) initializing (Please wait a moment…)
(正在对硬盘初始化,请稍等片刻)
解决方案:这种信息在较新的硬盘上根本看不到,但在较老的硬盘上,因为速度较慢,所以就会看到这个信息。
9、Hardware Monitor found an error,enter POWER MANAGEMENT SETUP for datails,Press F1 to continue,DEL to enter SETUP
(监视功能发现错误,进入“POWER MANAGEMENT SETUP”查看详细资料,按F1键继续开机程序,按DEL键进入CMOS设置)
解决方案:有的主板具备硬件的监测功能,可以设定主板与CPU的温度监测、电压调整器的电压输出准位监测和对各个风扇转速的监测,当上述监测功能在开机时发觉有异常情况才会出现这个信息,这时可以进入CMOS设置,查看“POWER MANAGEMENT SETUP”中哪方面出现异常,然后加以解决。
10、Keyboard error or no keyboard present
(键盘错误或者未接键盘)
解决方案:检查一下键盘的连线是否松动或者损坏,一些品质较次的键盘往往很容易出现此信息。
11、Memory test fail
(内存检测失败)
解决方案:通常这种情形是因为内存不兼容或故障所致。建议你重新插拔一下内存条,也许是因为内存条间互相不兼容。建议以每次开机一条内存的方式分批测试,找出故障的内存,把它拿掉或送修即可。
12、Override enable-Defaults loaded
(当前CMOS设定无法启动系统,载入BIOS中的预设值以便启动系统)
解决方案:一般是在CMOS设置内的设置出现错误才会出现此信息,只要重新进入CMOS设置选择“Load Setup Defaults”载入系统原来的设定值,然后重新启动即可。
13、Press TAB show POST screen
(按TAB键可以切换屏幕显示)
解决方案:有些主板厂商会以自己设计的开机显示画面来取代BIOS预设的开机显示画面,而此信息是要告诉用户可以按“TAB”键把厂商自己设计的开机显示画面和BIOS预设的开机显示画面进行切换。
14、Press ESC to skip memory test
(正在进行内存检测,可按下ESC键跳过)
解决方案:当然你也可以按ESC键结束内存检测,或者等待检测通过。如果你不想等待的话,进入CMOS设置后选择“BIOS Features Setup”,将其中的“Quick Power On Self Test”设为“Enabled”,储存后重新启动即可。
15、Primary master hard fail或Primary slave hard fail或Secondary master hard fail或Secondary slave hard fail
(检测硬盘失败)
解决方案:可能是CMOS设置不当,比如说没有从盘但在CMOS设置里设为有从盘,那么就会出现错误,这时可以进入CMOS设置对硬盘进行自动检测,也可能是硬盘的电源线,数据线可能未接好或者硬盘跳线设置不当。
16、Resuming from disk,Press TAB to show POST screen
(从硬盘恢复开机,按TAB显示开机自检画面)
解决方案:这是因为有些主板的BIOS提供了“Suspend to disk(将硬盘挂起)”的功能,如果我们用Suspend to disk的方式来关机,那么我们在下次开机时就会显示此提示消息
D. python communicate()方法怎么读取不到数据
供参考,py3代码运行通过,py2可能不需要调用encode
fromsubprocessimportPopen,PIPE
child=Popen('adbshell',stdin=PIPE,stdout=PIPE,shell=True)
output=child.communicate(input="ls-l".encode())
print(output)
E. Python Popen communicate 和wait使用上的区别
#!/usr/bin/env python
# coding: utf-8
# yc@2013/04/28
import subprocess
def test(size):
print 'start'
cmd = 'dd if=/dev/urandom bs=1 count=%d 2>/dev/null' % size
p = subprocess.Popen(args=cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, close_fds=True)
#p.communicate()
p.wait()
print 'end'
# 64KB
test(64 * 1024)
# 64KB + 1B
test(64 * 1024 + 1)
F. Python Popen communicate 和wait使用上的区别
简单说就是,使用subprocess模块的Popen调用外部程序,如果stdout或stderr参数是pipe,并且程序输出超过操作系统的pipesize时,如果使用Popen.wait()方式等待程序结束获取返回值,会导致死锁,程序卡在wait()调用上。ulimit-a看到的pipesize是4KB,那只是每页的大小,查询得知linux默认的pipesize是64KB。看例子:#!/usr/bin/envpython#coding:utf-8#yc@2013/04/28importsubprocessdeftest(size):print'start'cmd='ddif=/dev/urandombs=1count=%d2>/dev/null'%sizep=subprocess.Popen(args=cmd,shell=True,stdout=subprocess.PIPE,stderr=subprocess.STDOUT,close_fds=True)#p.communicate()p.wait()print'end'#64KBtest(64*1024)#64KB+1Btest(64*1024+1)首先测试输出为64KB大小的情况。使用dd产生了正好64KB的标准输出,由subprocess.Popen调用,然后使用wait()等待dd调用结束。可以看到正确的start和end输出;然后测试比64KB多的情况,这种情况下只输出了start,也就是说程序执行卡在了p.wait()上,程序死锁。具体输出如下:startendstart那死锁问题如何避免呢?官方文档里推荐使用Popen.communicate()。这个方法会把输出放在内存,而不是管道里,所以这时候上限就和内存大小有关了,一般不会有问题。而且如果要获得程序返回值,可以在调用Popen.communicate()之后取Popen.returncode的值。结论:如果使用subprocess.Popen,就不使用Popen.wait(),而使用Popen.communicate()来等待外部程序执行结束。Popen.wait()¶..=PIPEand/orstderr=.Usecommunicate()toavoidthat.Popen.communicate(input=None)¶Interactwithprocess:Senddatatostdin.Readdatafromstdoutandstderr,untilend-of-fileisreached.Waitforprocesstoterminate.,orNone,.communicate()returnsatuple(stdoutdata,stderrdata).’sstdin,=PIPE.Similarly,,youneedtogivestdout=PIPEand/orstderr=PIPEtoo.,.subprocess的两种方法:1)如果想调用之后直接阻塞到子程序调用结束:.,youcanjustusesubprocess.call.#.call([data["om_points"],">",diz['d']+"/points.xml"])2)非阻塞的时候方式:,.#startandprocessthings,thenwaitp=subprocess.Popen(([data["om_points"],">",diz['d']+"/points.xml"])print"Happenswhilerunning"p.communicate()#,waitcandeadlock,socommunicateisadvisable.
G. Python Popen communicate 和wait使用上的区别
官方文档里推荐使用 Popen.communicate()。这个方法会把输出放在内存,而不是管道里,所以这时候上限就和内存大小有关了,一般不会有问题。而且如果要获得程序返回值,可以在调用Popen.communicate() 之后取 Popen.returncode 的值。
结论:如果使用 subprocess.Popen,就不使用 Popen.wait(),而使用 Popen.communicate() 来等待外部程序执行结束。