我正在尝试使用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)
我的第一个想法是我需要指定一个endtime
到communicate
,因为它说它至少需要3个参数,但在reading the docs后我看到了
自版本3.4起不推荐使用:不要使用endtime参数。它是 无意中暴露在3.3但是没有记录 旨在私人供内部使用。改为使用超时。
所以现在我不知道问题是什么。
使用Python 2.7.11
和subprocess32 3.2.7