Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python 2.6.5,并获取调用php应用程序的结果_Php_Python - Fatal编程技术网

python 2.6.5,并获取调用php应用程序的结果

python 2.6.5,并获取调用php应用程序的结果,php,python,Php,Python,我有一个时髦的python代码: import subprocess value = subprocess.Popen(["php","./php/php_runner.php"],stdout=subprocess.PIPE); 问题是,我不知道如何检查php_运行程序是否运行了。目前,它有以下突出部分: if (count($argv) != 4){ die("four arguments are needed\n"); } 及 所以我想要的是: 如何使用python获取返回值,

我有一个时髦的python代码:

import subprocess
value = subprocess.Popen(["php","./php/php_runner.php"],stdout=subprocess.PIPE);
问题是,我不知道如何检查php_运行程序是否运行了。目前,它有以下突出部分:

if (count($argv) != 4){
    die("four arguments are needed\n");
}

所以我想要的是:

  • 如何使用python获取返回值,不管它是什么

  • 您可能会告诉我在答案中使用“PIPE”,但是(对我来说,不可理解的)python文档(http://docs.python.org/library/subprocess.html)声明:

    不要将stdout=PIPE或stderr=PIPE用于此函数。由于管道未在>当前进程中读取,如果子进程生成足够的输出到管道以填充>OS管道缓冲区,则子进程可能会阻塞。 那么我该用什么呢?因为虽然我不知道他们在说什么,但我还是坐起来,记下灰色盒子里的笔记。遗憾的是,他们没有详细说明我该做什么——但是,好吧,我该做什么呢

  • 我的php代码返回的“returnValue”是python从函数中获取的返回值吗?如果不是,如何返回该值
  • 干杯

    更新

    感谢给出的答案,以下是我所做的更改:

  • 编辑
    /etc/php5/cli/conf.d/mcrypt.ini
    (实际上,这只是对ubuntu 10.04的一个更改,我将第一行改为以;开头,而不是以#开头。这阻止了不断出现的恼人的“我们不喜欢#”错误)
  • 在我的php中,我将代码更改为:

    if (count($argv) != 4){
        fwrite(STDERR, "four arguments are needed\n");
        exit(1); // A response code other than 0 is a failure
    }
    
    这会将我的错误值作为错误。die()命令不是为我做的

  • 将python更改为:

    value = subprocess.Popen(["php","./php/php_runner.php"],stdout=subprocess.PIPE,   
    stderr=subprocess.PIPE);
    print value.communicate();
    
    是的,事实上,我会对value.communicate()[1]进行if运算,因为这就是错误所在


  • 糟糕

    由于您使用的是
    Popen
    构造函数,而不是
    call
    函数,因此有关管道的说明不适用于您


    使用文档中的
    .communicate()
    等待程序完成并获得输出。

    谢谢!我之前看过《沟通》,但并没有用管道来安装,所以我认为它并没有像我想象的那个样工作!
    value = subprocess.Popen(["php","./php/php_runner.php"],stdout=subprocess.PIPE,   
    stderr=subprocess.PIPE);
    print value.communicate();
    
    $returnValue =  call_to_another_php_class();
    if ($returnValue == 1){ //hah, php has a good return value as 1.
        //no problem
    } else {
        fwrite(STDERR,get_error_from_php_class());
        exit(1);
    }