我在MacOS 10.7.4上使用Python 2.7。这是一个较长的脚本(不是由我编写)的一部分,它本质上为PHP提供了一些配置选项,将它们写入PHP的stdin,然后从它的stdout读取它们。
在实践中,我似乎根本无法从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)
这个输出是:
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
/usr/bin/php
肯定有一个PHP。
答案 0 :(得分:1)
在php脚本的末尾似乎有一个额外的花括号,这可能会导致问题。
答案 1 :(得分:1)
你正在调试错误的东西。您将该字符串发送到PHP,并且您将收到PHP错误。 PHP正在抱怨第5行中的解析错误。
现在 - 是一个特殊的文件名,意思是stdin,所以它抱怨你发送的第5行,这似乎是一个悬空}
。