Не уверен, что происходит, но попробуйте создать свой скрипт оболочки следующим образом:
#!/bin/sh
while :
do
echo "Sleeping..."
sleep 1
done
Затем подтвердите, что ваша программа на Python при запуске этого скрипта делает то же самое.
Затем подтвердите вызов python с помощью этого скрипта:
#!/bin/sh
echo "I will exit"
Посмотрите, сможете ли вы получить больше выходных данных из исходного скрипта, создайте прокси-скрипт, который вы будете вызывать из вашего скрипта Python.
#!/bin/sh
/etc/init.s/rsyslogd stop > /tmp/log 2>&1
И отредактируйте свой оригинальный скрипт, чтобы получить больше вывода:
#!/bin/sh -xv
Я предполагаю, что это Bourne-Shell или Bash.
Затем вызовите этот скрипт: и затем проверьте / tmp / log с помощью:
tail -f /tmp/log
Кроме того, вы можете получить:
subprocess.call(...
Чтобы вернуть PID процесса, который создан? Если так, то отследите это, используя что-то вроде:
ps -eaf |grep <PID>
Где, конечно, должен быть заменен фактический PID.
В зависимости от ОС вы также можете:
truss -o /tmp/truss.out <PID>
Если этот 'truss.out' продолжает заполняться системными вызовами, то вы знаете, что ваш shell-скрипт зацикливается, а затем что-то отличается (я пока не уверен, что) между вызовом командной строки и вызовом python.
Я согласен с другим постером: похоже, что скрипт зацикливается, а не проблема строго со скриптом python.
Еще одна вещь, которую стоит попробовать:
В самом начале скрипта выведите аргументы - вы можете обнаружить, что он зацикливается, если не может получить правильные параметры или что-то в этом роде.