尝试超时进程时出现TypeError

时间:2016-10-05 20:58:42

标签: python python-2.7 timeout subprocess

我正在尝试使用subprocess32来暂停这样的程序

process = subprocess32.Popen(program, stdin =subprocess32.PIPE,
                                      stdout=subprocess32.PIPE,
                                      stderr=subprocess32.PIPE)
out, err = process.communicate(input_file, timeout=10)

这会引发TypeError

TypeError: __init__() takes at least 3 arguments (2 given)

没有超时参数,一切正常。但是我在这篇文章Using module 'subprocess' with timeout之后专门为此目的安装了subprocess32。

回溯:

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
     92                                            stdout=subprocess32.PIPE,
     93                                            stderr=subprocess32.PIPE)
---> 94         out, err = process.communicate(input_file, timeout=10)
     95
     96         if "Focus conditions specified by user have been achieved" in out:

C:\Anaconda\lib\site-packages\subprocess32.pyc in communicate(self, input, timeout)
    925
    926         try:
--> 927             stdout, stderr = self._communicate(input, endtime, timeout)
    928         finally:
    929             self._communication_started = True

C:\Anaconda\lib\site-packages\subprocess32.pyc in _communicate(self, input, endtime, orig_timeout)
   1188                 self.stdout_thread.join(self._remaining_time(endtime))
   1189                 if self.stdout_thread.isAlive():
-> 1190                     raise TimeoutExpired(self.args)
   1191             if self.stderr is not None:
   1192                 self.stderr_thread.join(self._remaining_time(endtime))

TypeError: __init__() takes at least 3 arguments (2 given)

我的第一个想法是我需要指定一个endtimecommunicate,因为它说它至少需要3个参数,但在reading the docs后我看到了

  

自版本3.4起不推荐使用:不要使用endtime参数。它是   无意中暴露在3.3但是没有记录   旨在私人供内部使用。改为使用超时。

所以现在我不知道问题是什么。

使用Python 2.7.11subprocess32 3.2.7

0 个答案:

没有答案