Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/278.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
Php Can';t使用Python写入和读取stdin/stdout_Php_Python - Fatal编程技术网

Php Can';t使用Python写入和读取stdin/stdout

Php Can';t使用Python写入和读取stdin/stdout,php,python,Php,Python,我正在MacOS 10.7.4上使用Python 2.7。这是一个较长脚本(不是我写的)的一部分,该脚本本质上为PHP提供了一些配置选项,将它们写入PHP的stdin,然后从其stdout读取它们 在实践中,我似乎根本无法阅读标准文本。下面的脚本应该写“hello world”,但它只写了一个空行 有人能告诉我出了什么问题吗?我不太熟悉stdin和stdout在Python或PHP中的工作方式,所以我正在努力调试它 php_path = '/usr/bin/php' args = [php_pa

我正在MacOS 10.7.4上使用Python 2.7。这是一个较长脚本(不是我写的)的一部分,该脚本本质上为PHP提供了一些配置选项,将它们写入PHP的stdin,然后从其stdout读取它们

在实践中,我似乎根本无法阅读标准文本。下面的脚本应该写“hello world”,但它只写了一个空行

有人能告诉我出了什么问题吗?我不太熟悉
stdin
stdout
在Python或PHP中的工作方式,所以我正在努力调试它

php_path = '/usr/bin/php'
args = [php_path]
child = subprocess.Popen(args,
      stdin=subprocess.PIPE,
      stdout=subprocess.PIPE,
      universal_newlines=True)
# Write to PHP stdin
print >>child.stdin, """
<?php
print "hello world\n";
# In reality we'd write some configuration options here,
# but in practice we can't even write 'hello world'. 
}
?>"""
child.stdin.close()
# Read from PHP stdout
line = True
while line:
    print 'line', line
    line = child.stdout.readline()
    print 'line from stdout', line
    if line == "hello world\n":
        break
else:
    raise Exception, "%s: failed to read options" % (php_path)
php_path='/usr/bin/php'
args=[php\u路径]
子进程=子进程.Popen(args,
stdin=子流程.PIPE,
stdout=子流程.PIPE,
通用(新行=真)
#写入PHP标准
打印>>child.stdin“
"""
child.stdin.close()
#从PHP标准输出读取
行=真
while line:
打印“行”,行
line=child.stdout.readline()
打印“标准输出的行”,行
如果行==“hello world\n”:
打破
其他:
引发异常“%s:无法读取选项”%(php\u路径)
此操作的输出为:

line True
line from stdout 

line 

line from stdout Parse error: parse error in - on line 5

line Parse error: parse error in - on line 5

line from stdout 
Traceback (most recent call last):
  File "test.py", line 25, in <module>
    raise Exception, "%s: failed to read options" % (php_path)
Exception: /usr/bin/php: failed to read options
line True
标准输出线
线
来自标准输出的行解析错误:第5行解析错误
行分析错误:第5行中的分析错误
标准输出线
回溯(最近一次呼叫最后一次):
文件“test.py”,第25行,在
引发异常“%s:无法读取选项”%(php\u路径)
异常:/usr/bin/php:无法读取选项

/usr/bin/PHP
上肯定有一个PHP

php脚本的结尾似乎有一个额外的大括号,这可能会导致问题。

您调试了错误的东西。将该字符串发送到PHP,就会返回一个PHP错误。PHP向我抱怨第5行的解析错误


Now-是一个特殊的文件名,意思是stdin,因此它抱怨您发送的第5行,这似乎是一个悬空的
}

您应该使用
Popen.communicate
,这非常简单,并且自动避免死锁。答案中已经指出了真正的问题。