Я успешно использовал subprocess.Popen
в прошлом, когда оборачивал двоичные файлы скриптом python для форматирования аргументов / настройки и т. Д. *
Разрабатывая n-ую оболочку, я сделал как обычно ... но ничего не происходит.
Вот маленький код:
print command
p = subprocess.Popen(command, shell = True)
result = p.communicate()[0]
print vars(p)
return result
А вот и вывод:
/usr/bin/sh /tmp/run/launch.sh
{'_child_created': True, 'returncode': 0, 'stdout': None, 'stdin': None, 'pid': 21650, 'stderr': None, 'universal_newlines': False}
Как видите, цель состоит в том, чтобы создать сценарий оболочки, настраивающий все, что мне нужно, и затем выполнить его. Я бы предпочел использовать настоящий код на Python, но, к сожалению, launch.sh
вызывает сторонние сценарии оболочки, которые я не хочу пытаться копировать (хотя я настаиваю на Python API более года назад).
Проблема в том, что:
- скрипт оболочки не выполняется (он должен порождать процесс и выводить некоторые мелочи)
- исключение Python не вызывается
- в объекте
p
нет ничего, что указывало бы на ошибку
Я пытался check_call
, но безуспешно ...
Я в растерянности относительно того, что мне следует делать, и был бы очень рад, если бы кто-то мог указать на мою ошибку или направить меня к решению ...
EDIT:
- Попытка запустить это в Linux (sh)
- Оболочка необходима для подстановки переменных в вызываемых скриптах
РЕДАКТИРОВАТЬ 2:
Следуя предложению badp
, я настроил код и добавил
subprocess.Popen('ps', shell = True).communicate()
Сразу после p = ...
строки, которая создает процесс, вот вывод:
/usr/bin/sh /tmp/run/launch.sh
PID TTY TIME CMD
29978 pts/0 00:00:01 zsh
1178 pts/0 00:00:01 python
1180 pts/0 00:00:00 sh <defunct>
1181 pts/0 00:00:00 ps
None
Очевидно, что процесс запущен (хотя <defunct>
), и следует также отметить, что у меня есть небольшая проблема с передачей параметров в ...
Спасибо.