파이썬 인터프리터가 처리하는 객체는 파이썬 객체이며 C 객체는 아닙니다. 따라서이 같은 C 문자열에 대한 비교 통역 특정 기능을 사용해야합니다 :
PyObject *o = PyTuple_GetItem(args, i);
if (PyUnicode_CheckExact(o) && PyUnicode_CompareWithASCIIString(o, "Python")==0){
printf("Do something else ..\n");
} else {
err = PyFile_WriteObject(o, file, Py_PRINT_RAW);
if (err)
return NULL;
}
이 current code의 장소에 추가합니다. 이전 2.7.3 릴리스,이 유니 코드 문자열을 처리하지 않습니다
if (PyUnicode_CheckExact(o)) {
PyObject* utf8 = PyUnicode_AsUTF16String(o);
if (strcmp(PyString_AsString(o), "Python")==0) {
printf("Do something else (unicode)\n");
}
Py_DECREF(utf8);
} else if (PyString_CheckExact(o) && strcmp(PyString_AsString(o), "Python")==0){
printf("Do something else (str) ..\n");
} else {
err = PyFile_WriteObject(o, file, Py_PRINT_RAW);
if (err)
return NULL;
}
주 (u'Python'
)처럼 PyString * 함수의 가족을 사용해야하는 당신을 위해. 인쇄물 을 처리하는 case PRINT_ITEM
을 Modules/ceval.c
으로 수정하는 데 관심이있을 수 있습니다.
파이썬 프로그램이 sys.stdout
에 쓰거나 navtive (C) 함수가 인쇄를 수행하는 것을 포함하여 print
을 호출하는 것보다 인쇄하는 다른 방법이 있습니다.
sys.stdout.write() 또는'print()'를 모든 파일에 겹쳐 써야합니까? 너 그냥 원숭이 패치 __builtin __. 인쇄 할 수 있습니까? – jfs
서식 :'__builtin__' – jfs
답장을 보내 주셔서 감사합니다. 명백하게, 나는 Monkey Patching을 모르고있다. 나는이 일을 끝내기 위해 하루 만 남았고 나는 매우 마지막 단계에 있으며, 나는 다음 날 Monkey Patching을 읽을 것입니다. – p0lAris