Как запустить несколько программ, имеющих цикл while (1) одновременно, используя Popen - PullRequest
0 голосов
/ 15 января 2019

Я хочу запустить два исполняемых файла C с Popen. У них обоих есть цикл while(1), и я хочу, чтобы они запускались одновременно, но я обнаружил, что это не нормально.

Вот два исполняемых файла C:

int main(int argc, char *argv[]){
    char str1[20];
    int i = 0;
    while(i < 30){
        fprintf(stderr, "hello1\n");
        i++;
    }
    while(1);
}
int main(int argc, char *argv[]){
    char str1[20];
    int i = 0;
    while(i < 30){
        fprintf(stderr, "hello2\n");
        i++;
    }
    while(1);
}

Вот код Python:

processes=[subprocess.Popen(program,universal_newlines=True,shell=True) for program in ['./hello1', './hello2']]
for process in processes:
    process.wait()

Он выводит только «hello1» и зависает.

1 Ответ

0 голосов
/ 15 января 2019

Ваш код на С имеет переменную без ссылки str1, FYI. Не проблема, хотя.

Однако после сборки hello1.exe и hello2.exe с помощью Visual C ++ и запуска вашего скрипта я не получаю сообщение об ошибке, поэтому ваша проблема связана с чем-то другим в вашей настройке.

#include "stdafx.h"
#include "stdio.h"

int main(int argc, char *argv[]) {
    int i = 0;
    while (i < 30) {
        fprintf(stderr, "hello[1/2]\n");
        i++;
    }
    while (1);
}

И тогда это работает так, как вы ожидаете:

import subprocess

processes = [subprocess.Popen(program, universal_newlines=True, shell=True) for program in ['hello1.exe', 'hello2.exe']]
for process in processes:
    process.wait()

Она печатает hello1 и hello2 и 30 раз, и ждет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...