Python:subprocess.Popen永远不会返回

时间:2013-07-30 01:26:05

标签: python subprocess threadpool

我编写了一个Python脚本,它使用subprocess.Popen运行一些svn命令。例如:

svn ls svn+ssh://url1/trunk
svn cp svn+ssh://url1/trunk svn+ssh://url1/branch/1 --parents -m "blah"

对于每个命令,我创建一个subprocess.Popen对象:

p = subprocesp.Popen(cmd, shell=True, stdout=sp.PIPE, stderr=sp.STDOUT)

等待它完成:

output      = p.communicate()[0].strip()
return_code = p.returncode

问题是,对于某些svn cp命令在shell上立即失败以复制不存在的回购, p.communicate()永远不会返回

额外信息:

  • 使用线程池(multiprocessing.pool.ThreadPool
  • 执行代码
  • 这种现象只是因为失败而被证实
  • 使用shell,完全相同的命令在不到两秒的时间内完成,错误代码为1。

知道我在这里缺少什么吗?

1 个答案:

答案 0 :(得分:1)

奇怪的是,问题是Eclipse。该脚本在shell中运行良好,但在内部Eclipse终端中永远等待。