如何使用Popen

时间:2019-01-15 00:34:17

标签: python subprocess

我想用Popen运行两个C可执行文件。他们两个都有一个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 :(得分:0)

您的C代码具有未引用的变量str1,仅供参考。但这不是问题。

但是,在使用Visual C ++构建hello1.exehello2.exe并运行脚本之后,我没有得到您所遇到的错误,因此看来您的问题特定于其他有关您的设置。

#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()

它将同时打印hello1hello2 30次并等待。