Как мне убедиться, что вызов другой программы завершился, прежде чем я продолжу работу с программой? - PullRequest
0 голосов
/ 18 июня 2020

Я пишу программу, которая использует al oop для запуска нескольких скриптов Prism (программа построения графиков), экспортирующих PNG. Однако у меня возникли некоторые трудности с тем, как работает Prism, и у меня есть несколько подозрений относительно того, что может быть причиной проблемы, перечисленных здесь:

  1. Prism не закончила делать все, что нужно сделать, прежде Я вызываю его снова
  2. Я использую неправильный конвейер для командной строки, хотя я также пробовал subprocess.popen () и os.system ()
  3. По какой-то причине команда Я отправляю в командную строку, ожидает в программе чего-то

Некоторое странное поведение, с которым я столкнулся, заключается в том, что, когда я запускаю программу, на экране появляется «метка» запуска Prism, но не отображается » t go через несколько секунд, указывая мне, что Prism запущен, но мой код не позволяет запускать его (конкретный код, который, как я думаю, вызывает это, показан ниже). Кроме того, создаваемое мной окно перестает отвечать, поэтому мне приходится закрыть программу. Однако после того, как я его закрою, Prism запускает скрипт, и я получаю экспортированные PNG из одного из скриптов (что также указывает на то, что программа может препятствовать запуску Prism).

Немного рассматриваемого кода это:

    os.popen(create_full_prism_path(create_script_name(f)).replace('/', '\\'))
    while (not(path.exists(root.output_path + "\\" + f + ".TV.png"))):
        pass

Где create_full_prism_path(create_script_name(f)).replace('/', '\\') - это команда, отправляемая в командную строку - я протестировал печать и выполнение этой команды после того, как все было выполнено, и она работает нормально.

while (not(path.exists(root.output_path + "\\" + f + ".TV.png"))):
        pass

- это время l oop, которое я использую, чтобы проверить, что перед тем, как я снова go через l oop, Prism фактически создала PNG, о котором я прошу.

Я пробовал обходные пути к этой проблеме, но не могу найти решение, кто-нибудь знает, как эту проблему можно решить?

...