2016-09-11 3 views
0

Я пытаюсь запустить parsey mcparseface из подпроцесса. Я получаю разные результаты при запуске Popen vs call, и мне интересно, почему это так. Это работает.subprocess.Popen выполняет .sh иначе, тогда subprocess.call

process = subprocess.Popen("./syntaxnet/demo.sh", cwd="/home/kahless/models/syntaxnet") 

Это не так.

process = subprocess.call("./syntaxnet/demo.sh", cwd="/home/kahless/models/syntaxnet") 

Оба варианта выполняются без ошибок python, но при запуске .call parsey не выполняется правильно. Это также происходит при использовании .wait() или .communicate() с помощью Popen. То, что я пытаюсь сделать, это приостановить выполнение моего кода до тех пор, пока парси не закончит. Не уверен, что происходит здесь.

Редактировать. Когда я говорю, что parsey не выполняется правильно, я имею в виду, что я получаю другой конечный результат от запуска файла demo.sh. Вот разные выходы.

Когда все работает правильно

INFO: tensorflow: Обработанные 10 документов INFO: tensorflow: Всего обработанных документов: 10 INFO: tensorflow: Num правильные символы: 0 INFO: tensorflow: всего лексем: 170 INFO : tensorflow: секунды, прошедшие в оценке: 0.18, eval metric: 0.00% INFO: tensorflow: обработано 10 документов INFO: tensorflow: Всего обработанных документов: 10 INFO: tensorflow: num correct tokens: 10 INFO: tensorflow: total tokens : 153 INFO: tensorflow: секунды, прошедшие в оценке: 0.86, e вал метрический: 6.54%

Когда они этого не делают.

INFO: tensorflow: Всего Обработанные документы: 0 INFO: tensorflow: Всего обработанных документов: 0

+2

Уточнитните 'parsey не полный correctly'. –

+0

Конечно, я обновил свой ответ, чтобы показать результат. Извините, что расплывчато. – Kahless

+0

Блоки вызовов Popen нет. –

ответ

0

Вы уверены, что когда-нибудь заканчивается?

Похоже, что ваш код зависает. Возможно, это требует ввода пользователем?

subprocess.call() ждет, пока он не закончит так, как wait() и communicate()

+0

Он не должен требовать ввода пользователем. Но я думаю, что файл demo.sh может вызывать другие скрипты. Я не совсем уверен. Вот ссылка на код https: // github.com/tensorflow/models/blob/master/syntaxnet/syntaxnet/demo.sh – Kahless

+0

Похоже, что вход от stdin означает ввод пользователя – Bharel

+0

Я вижу. Извините, я не понимал, что вы имели в виду. Вы можете установить его для получения ввода из файла. И это работает, когда я запускаю скрипт demo.sh напрямую. – Kahless

Смежные вопросы