Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
试图在python中对文件对象调用readline(),但它';暂停_Python_File_Subprocess_Wait - Fatal编程技术网

试图在python中对文件对象调用readline(),但它';暂停

试图在python中对文件对象调用readline(),但它';暂停,python,file,subprocess,wait,Python,File,Subprocess,Wait,我正在使用readline()函数从通过子流程模块获得的文件对象读取数据:proc=subprocess.Popen(cmd,bufsize=0,stdout=subprocess.PIPE)。这使我可以将proc.stdout用作带有proc.stdout.readline()的类似文件的对象。我的问题是,这会暂停等待输入,我希望在我进行readline调用时,如果没有输入,它会超时并继续。我正在运行Python2.4,如何使readline方法停止暂停?谢谢。在posix-y平台上(基本上是

我正在使用readline()函数从通过子流程模块获得的文件对象读取数据:
proc=subprocess.Popen(cmd,bufsize=0,stdout=subprocess.PIPE)
。这使我可以将
proc.stdout
用作带有
proc.stdout.readline()
的类似文件的对象。我的问题是,这会暂停等待输入,我希望在我进行readline调用时,如果没有输入,它会超时并继续。我正在运行Python2.4,如何使readline方法停止暂停?谢谢。

在posix-y平台上(基本上是除Windows以外的任何流行平台),该模块提供了用于此目的的正确工具。不幸的是,在Windows上,
select
只在套接字上工作(而不是在管道上,这是
subprocess.Popen
将要使用的),因此情况并不十分清楚。您需要在Windows上运行吗

如果没有,只需在
select.select中使用子流程对象
p
p.stdout.fileno()
,在短时间内调用
select即可,非常简单

编辑:下面是一个简单的示例(当然假设需要导入):


注意,没有“等待完整行”的方法:这将等待“任何输出”(然后阻塞,直到所有输出就绪)。要读取可用的内容,请在开始循环之前使用设置文件描述符(what
fileno()
returns)。

no,这是在CentOS 5上运行的。5@William,那么我的第二段应该给你“王国的钥匙”;-)。您是否需要一些示例代码来帮助您进一步。。。?
>>> def f():                                                                    
...   p = subprocess.Popen("sleep 10; echo ciao", shell=True, stdout=subprocess.PIPE)
...   while True:                                                               
...     r, w, x = select.select([p.stdout.fileno()],[],[],1.0)
...     if r: return p.stdout.read()
...     print 'not ready yet'
... 
>>> f()
not ready yet
not ready yet
not ready yet
not ready yet
not ready yet
not ready yet
not ready yet
not ready yet
not ready yet
not ready yet
'ciao\n'
>>>