В python запускайте параллельно исполняемый файл .exe, не дожидаясь завершения файла .exe - PullRequest
0 голосов
/ 16 июня 2019

Это всего лишь пример, но может возникнуть больше ситуаций. Предположим, у вас есть исполняемый файл из файла «myscript.py» с бесконечным значением true, но на самом деле это условие, извлеченное из файла,

# myscript.py file to be executed..

bool_condition = True
while bool_condition :
    bool_condition = pickle.load(open('file_condition.p','rb'))

    # -- script lines under while-condition -- #

# endwhile bool_condition 

В принципе это бесконечно, если только другой скрипт не изменит содержимое файла file_condition.p. Теперь рассмотрим GUI, что активация исполняемого файла происходит от нажатия кнопки, а остановка исполняемого файла также происходит от действия кнопки, так что, если вы нажимаете кнопку остановки, меняется содержимое condition.p, и, следовательно, также переменная "bool_condition" от True до False, и, следовательно, выполнение останавливается.

Ключ в том, что когда нажата кнопка пуска, появляется строка, которая запускает выполнение «myscript», не дожидаясь окончания выполнения этой строки (потому что в противном случае старт-кнопка зависает, и вы не можете нажать кнопку остановки -кнопка). Я знаю, как выполнить параллельное выполнение без ожидания из файла "myscript.py" файла python,

pid = subprocess.Popen([os.sys.executable, "myscript.py"], 
      stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE)

однако он не работает из файла * .exe, "myscript.exe",

# 1st try..

pid = subprocess.Popen([os.sys.executable, "myscript.exe"], 
      stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE)

# 2nd try..

pid = subprocess.Popen(os.system(myscript.exe), stdout=subprocess.PIPE, 
      stderr=subprocess.PIPE, stdin=subprocess.PIPE)

Для меня невозможно думать, что Python не способен выполнять параллельное выполнение файла * .exe без ожидания (то есть без ожидания завершения выполнения, например os.sys (myscript.exe)). Действительно ли Python способен на это?

1 Ответ

1 голос
/ 16 июня 2019

Попробуйте:

pid = subprocess.Popen(["myscript.exe"], stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE)

Передача абсолютного пути к «myscript.exe» также сделает весь вызов более безопасным.

Передав os.sys.executable в качестве первого аргумента Popen, вы эффективно вызываете python. Это хорошо, если вы хотите запустить скрипт Python, но exe-файл не является скриптом Python, и именно поэтому он не работает.

...