python的popen

1.Python fopen,和popen的区别 搜狗问问

open标准posix接口,通用接口,不带缓冲区,效率和速度不错,用close关闭。

fopen基于posix进行封装,在glibc中,有缓冲区,效率也不错,主要多文件进行操作,用fclose关闭。

如:fopen(“/proc/partitions”, “r”));

popen为创建管道,内部fork进程执行shell命令,效率堪忧,用pclose关闭。

如:popen(“cat /proc/partitions”, “r”));

2.python 学习 关于subprocess.call(*popenargs,**kwargs)的疑问?百

文档里tutorial里有【貌似在function那节】*popenargs意为一般的【表达无力 :)】参数**kwargs意为key=value形式的参数比方说:def func(*args, **kwargs): print 'args: ', args print 'kwargs: ', kwargsfunc('a', 'b', 'c', x='d', y='e', z='f')输出为:args: ('a', 'b', 'c')kwargs: {'y': 'e', 'x': 'd', 'z': 'f'}以上。

3.Python Popen communicate 和wait使用上的区别

简单说就是,使用 subprocess 模块的 Popen 调用外部程序,如果 stdout 或 stderr 参数是 pipe,并且程序输出超过操作系统的 pipe size时,如果使用 Popen.wait() 方式等待程序结束获取返回值,会导致死锁,程序卡在 wait() 调用上。

ulimit -a 看到的 pipe size 是 4KB,那只是每页的大小,查询得知 linux 默认的 pipe size 是 64KB。 看例子: #!/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) 首先测试输出为 64KB 大小的情况。

使用 dd 产生了正好 64KB 的标准输出,由 subprocess.Popen 调用,然后使用 wait() 等待 dd 调用结束。可以看到正确的 start 和 end 输出;然后测试比 64KB 多的情况,这种情况下只输出了 start,也就是说程序执行卡在了 p.wait() 上,程序死锁。

具体输出如下: start end start 那死锁问题如何避免呢?官方文档里推荐使用 Popen.communicate()。这个方法会把输出放在内存,而不是管道里,所以这时候上限就和内存大小有关了,一般不会有问题。

而且如果要获得程序返回值,可以在调用 Popen.communicate() 之后取 Popen.returncode 的值。 结论:如果使用 subprocess.Popen,就不使用 Popen.wait(),而使用 Popen.communicate() 来等待外部程序执行结束。

Popen.wait()¶ Wait for child process to terminate. Set and returnreturncode attribute. Warning This will deadlock when using stdout=PIPE and/orstderr=PIPE and the child process generates enough output to a pipe such that it blocks waiting for the OS pipe buffer to accept more data. Use communicate() to avoid that. Popen.communicate(input=None)¶ Interact with process: Send data to stdin. Read data from stdout and stderr, until end-of-file is reached. Wait for process to terminate. The optionalinput argument should be a string to be sent to the child process, orNone, if no data should be sent to the child. communicate() returns a tuple (stdoutdata, stderrdata). Note that if you want to send data to the process's stdin, you need to create the Popen object with stdin=PIPE. Similarly, to get anything other thanNone in the result tuple, you need to give stdout=PIPE and/orstderr=PIPE too. Note The data read is buffered in memory, so do not use this method if the data size is large or unlimited. subprocess 的两种方法: 1)如果想调用之后直接阻塞到子程序调用结束: Depending on how you want to work your script you have two options. If you want the commands to block and not do anything while it is executing, you can just use subprocess.call. #start and block until done subprocess.call([data["om_points"], ">", diz['d']+"/points.xml"]) 2)非阻塞的时候方式: If you want to do things while it is executing or feed things into stdin, you can use communicate after the popen call. #start and process things, then wait p = subprocess.Popen(([data["om_points"], ">", diz['d']+"/points.xml"]) print "Happens while running" p.communicate() #now wait As stated in the documentation, wait can deadlock, so communicate is advisable.。

4.python语句 os.system os.popen什么意思

os.system() 和os.popen()的区别

返回的数据不同

1 os.system(“ls") 返回0

但是这样是无法获得到输出和返回值的

继续 Google,之后学会了 os.popen()。 view sourceprint?

a。 output = os.popen('cat /proc/cpuinfo')

b。 print output.read()

os.system() returns the (encoded) process exit value. 0 means success:

输出0为正确运行。1为出现异常。

如果你想得到标准输出,可以使用 subprocess.check_output() 来代替这个方法

x = subprocess.check_output(['whoami'])

python的popen

转载请注明出处代码入门网 » python的popen

资讯

python文件到输出到文件

阅读(28)

本文主要为您介绍python文件到输出到文件,内容包括python怎样将结果输出到文件中,Python读取文档各行中同一列数据并按首尾相接合并输出到另一个文,python如何让一个函数的输出写入到一个文件中?。首先导入sys模块 import sys 然后在打算把

资讯

python的冒号

阅读(19)

本文主要为您介绍python的冒号,内容包括python中的冒号:表示什么意思,python中的冒号到底是什么语义,python中什么时候需添加冒号?。函数参数中的冒号是参数的类型建议符,告诉程序员希望传入的实参的类型。函数后面跟着的箭头是函数返回值的

资讯

pythonreturnforin

阅读(24)

本文主要为您介绍pythonreturnforin,内容包括pythonreturn语句,inreturnfor有这个词组吗什么意思啊,python中函数嵌套循环语句时,return如何正确使用返回值。return语句是从函数返回一个值,每个函数都要有一个返回值。函数中一定要有return

资讯

python文件行数

阅读(30)

本文主要为您介绍python文件行数,内容包括Python读取指定行数,python怎么得到一个文件里面的行数,Python计算一个文件中有多少行即读取文件行数。写一个文本统计的脚本:计算并打印有关文本文件的统计数据,包括文件里包含多少个字符、行、单词

资讯

python程序设计

阅读(27)

本文主要为您介绍python程序设计,内容包括python程序设计,python程序设计,课程里面Python程序设计和Python高级程序设计有啥区别。# 如果能利用正则表达式(re模块)可能程序会更简单些。str_test = input("please enter a string:

资讯

python的书籍推荐

阅读(27)

本文主要为您介绍python的书籍推荐,内容包括关于Python方面比较好的书籍,Python好点的书推荐,Python入门书籍推荐。python的书很多 , 但是好书不多, 经过我这么多年的2113python学习,我总结出了一个python学习的读书路线:pytho

资讯

pythonifandif

阅读(32)

本文主要为您介绍pythonifandif,内容包括pythonelseif怎么表示,Pythonif语句,python的if语句问题。score = raw_input("score:") score=int(score) if(score >= 90) and (sc

资讯

pythonpipcentos

阅读(27)

本文主要为您介绍pythonpipcentos,内容包括centospythonpip有什么用,如何解决centos7中pythonpip模块不存在,如何在centos6.4上安装pip。之前有的朋友问我,CentOS版本怎么安装python的pip,我之前给出的Ubuntu下apt-get的方法 ubuntu 需要先安

资讯

pythonxypython

阅读(33)

本文主要为您介绍pythonxypython,内容包括Python(x,y)和Python是什么关系?,python(x,y)如何打开编程页面?,python(x,y)如何打开编程页面?。python(x,y),包括了完整的Python语言开发包,非常全面;加上Wing IDE强大的调试功能,一定会让我们的学习

资讯

twistedpython

阅读(34)

本文主要为您介绍twistedpython,内容包括twisted,celery有何区别,pythontwisted模块有什么作用,pythontwisted模块有什么作用。一,英语语言角度:二者词性,词义,都相去甚远 。twisted twist的过去式和过去分词形式,可单独作形容词,意为:拧的;古怪的c

资讯

pythoncryptocrypto

阅读(28)

本文主要为您介绍pythoncryptocrypto,内容包括怎么使用pythoncrypto,crypto是什么意思,Crypto意思。环境:windows8 64位解决步骤:1.安装pip,Python的官网上去下载,下 1.1选择:下图文件下载到本地磁盘11.2 进入

资讯

python发请求

阅读(32)

本文主要为您介绍python发请求,内容包括python发送请求问题,如何用python写后台接收客户端发送的post请求,pythonhttplib怎么打印发送的请求。import httplibimport urllibConn = httplib.HTTPConnection("113.251.22

资讯

rawinputpython

阅读(32)

本文主要为您介绍rawinputpython,内容包括python的rawinput用法,python中input和rawinput的区别,python的rawinput用法。record = []while True: info = [] userInput = raw_input(Enter somethi

资讯

boostpython

阅读(30)

本文主要为您介绍boostpython,内容包括如何调用xgboostpython,如何使用boost::python为C++程序开发一个基于python语言的扩展框架,boost.python有没人用过?。1建议大家使用anoconda,里面集成了不少做挖掘、统计相关的包,省去了我们自己安装的

资讯

python文件到输出到文件

阅读(28)

本文主要为您介绍python文件到输出到文件,内容包括python怎样将结果输出到文件中,Python读取文档各行中同一列数据并按首尾相接合并输出到另一个文,python如何让一个函数的输出写入到一个文件中?。首先导入sys模块 import sys 然后在打算把

资讯

python的冒号

阅读(19)

本文主要为您介绍python的冒号,内容包括python中的冒号:表示什么意思,python中的冒号到底是什么语义,python中什么时候需添加冒号?。函数参数中的冒号是参数的类型建议符,告诉程序员希望传入的实参的类型。函数后面跟着的箭头是函数返回值的

资讯

pythonreturnforin

阅读(24)

本文主要为您介绍pythonreturnforin,内容包括pythonreturn语句,inreturnfor有这个词组吗什么意思啊,python中函数嵌套循环语句时,return如何正确使用返回值。return语句是从函数返回一个值,每个函数都要有一个返回值。函数中一定要有return

资讯

python文件行数

阅读(30)

本文主要为您介绍python文件行数,内容包括Python读取指定行数,python怎么得到一个文件里面的行数,Python计算一个文件中有多少行即读取文件行数。写一个文本统计的脚本:计算并打印有关文本文件的统计数据,包括文件里包含多少个字符、行、单词

资讯

python程序设计

阅读(27)

本文主要为您介绍python程序设计,内容包括python程序设计,python程序设计,课程里面Python程序设计和Python高级程序设计有啥区别。# 如果能利用正则表达式(re模块)可能程序会更简单些。str_test = input("please enter a string:

资讯

python的书籍推荐

阅读(27)

本文主要为您介绍python的书籍推荐,内容包括关于Python方面比较好的书籍,Python好点的书推荐,Python入门书籍推荐。python的书很多 , 但是好书不多, 经过我这么多年的2113python学习,我总结出了一个python学习的读书路线:pytho

资讯

pythonifandif

阅读(32)

本文主要为您介绍pythonifandif,内容包括pythonelseif怎么表示,Pythonif语句,python的if语句问题。score = raw_input("score:") score=int(score) if(score >= 90) and (sc

资讯

sqlite3python

阅读(32)

本文主要为您介绍sqlite3python,内容包括sqltilepython怎么打开,python自带sqlite3怎么用,pythonsqlite3的问题。SQLite是一种嵌入式数据库,它的数据库就是一个文件。由于SQLite本身是C写的,而且体积很小,所以,经常被集成到各种应用程序中,甚