|
[python] - тонкие отличия os.popen2 и subprocess.Popen
|
|||
---|---|---|---|
#18+
Код: python 1. 2. 3. 4. 5. 6.
коллеги, помогите начинающему питонисту. (использую Python 2.7, windows) - есть 2 альтернативных способа запуска дочернего процесса. второй работает хорошо, стабильно, приложения получают ввод и отдают вывод, в первом же варианте одно из приложений работает некорректно. а второе нормально. Я захотел разобраться почему так, но открыв os.py так и не нашел, где оно для винды затягивает функцию popen2 - нашел только фрагмент для юникса Код: python 1. 2. 3. 4. 5.
и тут стало вообще интересно как это устроено.... если кто подскажет - большое спасибо. В принципе, работающего варианта пока хватает, но под третьим python-ом оно уже работать перестанет, а было бы неплохо и там тоже. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.03.2017, 14:36 |
|
[python] - тонкие отличия os.popen2 и subprocess.Popen
|
|||
---|---|---|---|
#18+
Vladimir Baskakov, os.popen и остальные его братья - устаревшие методы, его никто их не поддерживает и они крайне не рекомендуются к использованию. Просто забудьте про них и все. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.03.2017, 19:19 |
|
[python] - тонкие отличия os.popen2 и subprocess.Popen
|
|||
---|---|---|---|
#18+
Спасибо . Но код работает именно с ним. Устаревшим. А с новым глючит. Именно поэтому я и задал вопрос - я хочу заменить на новое, но чтобы работало, а не глючило ((( ... |
|||
:
Нравится:
Не нравится:
|
|||
22.03.2017, 05:44 |
|
[python] - тонкие отличия os.popen2 и subprocess.Popen
|
|||
---|---|---|---|
#18+
Vladimir BaskakovА с новым глючит. Что значит "глючит"? Дайте минимальный воспроизводимый пример некорректного поведения. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.03.2017, 07:10 |
|
[python] - тонкие отличия os.popen2 и subprocess.Popen
|
|||
---|---|---|---|
#18+
минимального нет. Есть скрипт https://github.com/zztrilobit/go_assistant/blob/master/goban.py предназначение которого - рисовать визуальный интерфейс к играющим в го утилитам комакндной строки. рисовать с нужными мне особенностями - так то есть готовые решения, но мне занадобилось поменять class GoEngine: def StartEngin(self,cmd): - запускает таковую утилиту def gtp(self, command): - посылает ей команду и считывает ответ. Сейчас отладка проходит с двумя движками - GNUGO и leela. GNUGO независимо от библиотечной функции которая запустила и подключилась к каналам дает правильный ответ. leela пока нормально коммуницирует только при запуске с помощью os.popen2 а - при запуске через p=Popen(cmd, bufsize=-1, stdin=PIPE, stdout=PIPE) self.to_=p.stdin self.from_=p.stdout в ответ на любую команду дает неправильный ответ который вылавливается тут: assert(self.from_gnugo.read(1) == "\n") - вот мне любопытно, почему так. Откуда в потоке взялся "\n" Чтобы воспроизвести, естественно нужно скачивать эту самую леелу, что конечно всем будет лень.... поэтому я задал вопрос более общий : - где посмотреть исходник устаревшей и новой функции (класса) чтобы найти отличия в работе. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.03.2017, 09:54 |
|
[python] - тонкие отличия os.popen2 и subprocess.Popen
|
|||
---|---|---|---|
#18+
FishHook, Код: python 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73.
..\python.exe test.py 1>1 2>2 Результаты stdout (1) : starting leela080.exe --g 1 time_settings 1 3 1 =1 2 quit =2 starting leela080.exe --g 3 time_settings 1 3 1 stderr (2) : 110 feature weights loaded, 2608 patterns BLAS core: MKL Intel(R) Streaming SIMD Extensions 4.2 (Intel(R) SSE4.2) enabled processors Traceback (most recent call last): File "test.py", line 77, in <module> e.time_by_move(3) File "test.py", line 62, in time_by_move return self.gtp("time_settings 1 "+str(seconds)+" 1") File "test.py", line 49, in gtp assert(self.from_gnugo.read(1) == "\n") AssertionError коммент - в stderr попал как вывод leela 110 feature weights loaded, 2608 patterns BLAS core: MKL Intel(R) Streaming SIMD Extensions 4.2 (Intel(R) SSE4.2) enabled processors Traceback (most recent call last): так и сообщение об ошибке на assert. ну и понятно что второй процесс энжина остался висеть в памяти и жрать процессорное время ... |
|||
:
Нравится:
Не нравится:
|
|||
22.03.2017, 10:27 |
|
[python] - тонкие отличия os.popen2 и subprocess.Popen
|
|||
---|---|---|---|
#18+
..... в общем наверное придется делать типа такого.... http://eyalarubas.com/python-subproc-nonblock.html похоже по простому не выйдет ..... ну или оставить все как есть, на неправильной библиотечке... (((((((( ... |
|||
:
Нравится:
Не нравится:
|
|||
22.03.2017, 17:10 |
|
[python] - тонкие отличия os.popen2 и subprocess.Popen
|
|||
---|---|---|---|
#18+
Vladimir Baskakovпохоже по простому не выйдет Ну я не знаю, зачем вы на неблокирующий ввод/вывод смотрите (он вашу проблему не решит все равно). Вам по идее банальное Код: python 1.
нужно. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.03.2017, 22:50 |
|
[python] - тонкие отличия os.popen2 и subprocess.Popen
|
|||
---|---|---|---|
#18+
maxkar, есть еще пакет multiprocessing. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.03.2017, 07:31 |
|
[python] - тонкие отличия os.popen2 и subprocess.Popen
|
|||
---|---|---|---|
#18+
....... решено. os.popen2 открывал каналы, убирающие \r из потока. В отличие от subprocess.popen. искать, почему так, уже лень. просто доработал цикл чтения ........ ... |
|||
:
Нравится:
Не нравится:
|
|||
24.03.2017, 09:36 |
|
|
start [/forum/topic.php?fid=23&msg=39426228&tid=1460705]: |
0ms |
get settings: |
11ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
36ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
45ms |
get tp. blocked users: |
1ms |
others: | 297ms |
total: | 427ms |
0 / 0 |