我编写了一个 Python 脚本,它使用subprocess.Popen
. 例如:
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
对于复制不存在的 repos 时在 shell 上立即失败的某些命令,p.communicate()
永远不会返回.
额外的信息:
- 代码使用线程池 (
multiprocessing.pool.ThreadPool
)执行 - 这种现象只在失败时表现出来
- 使用 shell,完全相同的命令在不到两秒的时间内以错误代码 1 结束。
知道我在这里想念什么吗?