1

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

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

谁能建议出了什么问题?我不太熟悉 Python 或 PHP 的工作方式stdinstdout工作方式,所以我正在努力调试它。

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)

输出是:

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

肯定有一个 PHP 在/usr/bin/php.

4

2 回答 2

1

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

于 2012-07-19T11:48:42.873 回答
1

你在调试错误的东西。您将该字符串发送到 PHP,然后您会收到一个 PHP 错误。PHP 在第 5 行向我抱怨解析错误。

现在 - 是一个特殊的文件名,意思是标准输入,所以它抱怨你发送它的第 5 行,这似乎是一个悬空的}.

于 2012-07-19T11:48:51.043 回答