2013-07-30 3 views
0

Я написал скрипт Python, который запускает некоторые команды svn, используя subprocess.Popen. Например: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, которые немедленно сбой в оболочке для копирования несуществующих репозиториев, p.communicate() никогда не возвращается.

Дополнительная информация:

  • код выполняется с использованием пула потоков (multiprocessing.pool.ThreadPool)
  • Явления является menifested только за то,
  • Использование оболочки, точно такие же команда завершается с кодом ошибки 1 менее чем за две секунды.

Любая идея, чего я здесь не хватает?

ответ

1

Как ни странно, проблема была в Eclipse. Скрипт отлично работает с оболочкой, но всегда ждет на внутреннем терминале Eclipse.

+1

Ваше сообщение побудило меня проверить то же самое с Visual Studio .. работает в REPL, но не из VS2015. –