2012-02-11 10 views
7

を動作しませんRPython sysの方法は、私は次のコードを持っている

... 
[translation:ERROR] Exception: unexpected prebuilt constant: <built-in function exit> 
[translation:ERROR] Processing block: 
[translation:ERROR] [email protected] is a <class 'pypy.objspace.flow.flowcontext.SpamBlock'> 
[translation:ERROR] in (t:3)entry_point 
[translation:ERROR] containing the following operations: 
[translation:ERROR]  v0 = simple_call((builtin_function_or_method exit), (1)) 
[translation:ERROR] --end-- 

エラーに多くが実際にありましたが、この最後の部分だけが関係していると思った。それ以上のことが役に立つと思うなら、コメントして編集します。

実際、sys.exitをsys.stdout.writeのようなもっと簡単なものに置き換えると、別のエラーが発生します。

import sys 

def entry_point(argv): 
    sys.stdout.write('some mesg\n') 
    return 0 

def target(*args): 
    return entry_point, None 

は私を与える:

... 
[translation:ERROR] AnnotatorError: annotation of v0 degenerated to SomeObject() 
[translation:ERROR] v0 = getattr((module sys), ('stdout')) 
[translation:ERROR] 
[translation:ERROR] In <FunctionGraph of (t:3)entry_point at 0x10d03de10>: 
[translation:ERROR] Happened at file t.py line 4 
[translation:ERROR] 
[translation:ERROR] ==>  sys.stdout.write('some mesg\n') 
[translation:ERROR] 
[translation:ERROR] Previous annotation: 
[translation:ERROR] (none) 
[translation:ERROR] Processing block: 
[translation:ERROR] [email protected] is a <class 'pypy.objspace.flow.flowcontext.SpamBlock'> 
[translation:ERROR] in (t:3)entry_point 
[translation:ERROR] containing the following operations: 
[translation:ERROR]  v0 = getattr((module sys), ('stdout')) 
[translation:ERROR]  v1 = getattr(v0, ('write')) 
[translation:ERROR]  v2 = simple_call(v1, ('some mesg\n')) 
[translation:ERROR] --end-- 

は単にRPythonのため立ち入り禁止のsys方法はありますか? exitとstdoutはCで簡単に利用できるので私には奇妙なようです。しかし、エラーメッセージの種類はそれぞれ違うかもしれないので、間違ったツリーを吠えるかもしれません。

現在、私はthisガイドを使用して、RPythonで許可されているものと許可されていないものを大まかに把握しています。より多くの情報のために私が使用することができる他のアクセスしやすい参照がありますか?

+2

申し訳ありませんが、最後の例が間違っていることを指摘してください: 'sys.std.write'を' sys.stdout.write'で置き換えてください。 'sys.std 'である。 – mouad

+0

@mouadそれを指摘してくれてありがとう。私はもう一度試して、更新されたエラーメッセージを投稿しました。 – math4tots

答えて

9

sysモジュールはRPythonではありません。RPythonプログラムでは使用できません。ステータスコードを返すには、entry_point関数から直接ステータスコードを返す必要があります。

sys.stdout/sys.stdin/sys.stderrも使用できません。ファイルディスクリプタと組み合わせたos.read /os.write関数を使用して読み書きする必要があります。

+0

sysが利用できない場合、stdin/stdoutファイル記述子を取得してos.readに渡すことができますか? raw_input/printを通してstdin/stdoutを得る唯一の方法はありますか? – math4tots

+0

stdin = 0、stdout = 1、stderr = 2これらの整数引数でos.write/os.readを呼び出すことができます。 –

関連する問題