Python:子流程.Popen再也不回来了

2024-04-26 20:20:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我编写了一个Python脚本,它使用^{}运行一些svn命令。例如:

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

对于每个命令,我创建一个子流程.Popen对象:

^{pr2}$

然后等待它完成:

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

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

额外信息:

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

你知道我在这里遗漏了什么吗?在


Tags: 命令脚本branchsvn流程shellcpls