Интеграция Python с другими языками

Материал из Xgu.ru

Перейти к: навигация, поиск

Содержание

[править] Вопросы и ответы

[править] Можно ли вызвать Segmentation fault у интерпретатора CPython?

Да можно, и есть несколько хорошо изестных методов это сделать. Вот здесь [1] лежит официальный список готовых программ, которые валят CPython.

[править] Можно ли с помощью ctypes вызывать функции из DLL Windows?

Вообще, с помощью ctypes и windll можно делать довольно много всего, что просто так сделать в Windows довольно тяжело. Например, даже такая простая вещь как найти полный путь программы (аналог which) в самой по себе Windows сделать сложно, но с помощью python + ctypes + windll очень легко.

import ctypes

def which(program):
    path = ctypes.create_unicode_buffer(1024)
    ctypes.windll.shell32.FindExecutableW(
        ctypes.c_wchar_p(program),
        None,
        ctypes.pointer(path)
    )
    return path.value

print which('explorer')

Другие примеры использования смотрите, например, здесь [2].

[править] Как изменить стандартный поток вывода для С-функций?

import zook
import os
import sys

def redirect_stdout():
    print "Redirecting stdout"
    sys.stdout.flush() # <--- important when redirecting to files
    newstdout = os.dup(1)
    devnull = os.open('/dev/null', os.O_WRONLY)
    os.dup2(devnull, 1)
    os.close(devnull)
    sys.stdout = os.fdopen(newstdout, 'w')

zook.myfunc()
redirect_stdout()
zook.myfunc()
print "But python can still print to stdout..."

[править] Дополнительная информация

[править] Интеграция с другими языками

[править] Си

[править] Примечания