subprocess.call () Зависает. "os.waitpid (self.pid, wait_flags)" - PullRequest
0 голосов
/ 20 апреля 2020

У меня странная проблема, с которой я не сталкивался раньше. У меня есть скрипт для доставки отчетов в формате PDF за определенный период времени. До сих пор это работало нормально, но я сделал некоторые обновления и перенес эти изменения на сервер. Теперь мой процесс зависает в subprocess.call (), и я не уверен, почему.

Я прочитал, что это может быть проблемой при использовании PIPE, но это не так. Я не уверен даже, как я мог бы отладить эту проблему. Любые идеи?

subprocess.call(
                ['{}/orca.sh'.format(orca_dir),
                 'graph',
                 json.dumps(chart, cls=plotly.utils.PlotlyJSONEncoder),
                 '--width',
                 '1200',
                 '--scale',
                 '4',
                 '-o',
                 '/temp/{}'.format("a" + (count * "a"))]
)



 File "/root/**", line 97, in **
    '/temp/{}'.format("a" + (count * "a"))])
  File "/root/anaconda3/envs/**/lib/python3.7/subprocess.py", line 325, in call
    return p.wait(timeout=timeout)
  File "/root/anaconda3/envs/**/lib/python3.7/subprocess.py", line 990, in wait
    return self._wait(timeout=timeout)
  File "/root/anaconda3/envs/**/lib/python3.7/subprocess.py", line 1624, in _wait
    (pid, sts) = self._try_wait(0)
  File "/root/anaconda3/envs/**/lib/python3.7/subprocess.py", line 1582, in _try_wait
    (pid, sts) = os.waitpid(self.pid, wait_flags)

orca. sh выполняет контейнер AppImage Orca для запуска их автономного программного обеспечения с заданными параметрами. Стоит также отметить, что я запускаю этот сценарий на двух серверах, но второй является предварительным обновлением и все еще отлично работает. Ни одно из внесенных мною изменений не было внесено в то, как выполняется этот вызов или как он должен работать. Может ли это быть что-то внутри контейнера AppImage, что заставляет меня зависать?

1 Ответ

0 голосов
/ 20 апреля 2020

Выявлена ​​проблема.

Мой сценарий, который составил список объектов Plotly для создания этих диаграмм, не смог правильно создать первый объект графика. Таким образом, первым объектом был NoneType, но subprocess.call () вызывался с каждым членом списка. К сожалению, поскольку AppImage не получил данные диаграммы, кажется, он просто завис на неопределенный срок.

...