1

MacOS 10.7.4 で Python 2.7 を使用しています。これは、基本的に PHP にいくつかの構成オプションを提供し、それらを PHP の stdin に書き込んでから、その stdout から読み取る長いスクリプト (私が作成したものではありません) の一部です。

実際には、標準出力からまったく読み取ることができないようです。以下のスクリプトは「hello world」と書くべきですが、書くのは空行だけです。

誰が何が問題なのかを提案できますか? 私はその方法とPythonでの作業、またはPHPでの作業にあまり慣れていないstdinためstdout、これをデバッグするのに苦労しています。

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 行目で解析エラーについて不平を言っています。

現在 - は stdin を意味する特別なファイル名であるため、送信した 5 行目について不平を言っています}

于 2012-07-19T11:48:51.043 に答える