Я использую модуль python под названием dis
для анализа байт-кода. По умолчанию dis
отправит вывод на экран. Я хотел бы, чтобы re- направил вывод dis
в файл без изменения модуля dis
. Проблема в том, что я вызываю dis
из длинной программы после некоторого условия. Я приведу пример!
class foo(object):
def method1():
print 'something'
name = 6
print name
class boo(object):
def method1():
print 'nothing'
name = 10
print name
import dis
# other statements
if foo.method1.im_func.func_code.co_code != boo.method1.im_func.func_code.co_code:
dis.dis(method1) # would like to redirect output to a file
dis.dis(method2) # would like to redirect output to a file
# other statements
используя sys.stdout = open('file', 'w')
, отправляет все в файл. Однако есть некоторые статусы, которые являются частью основной программы, которую я хотел бы видеть на экране, когда программа работает.
Вы можете установить и reset sys.stdout
до и после вызова dis
подпрограмм:
sys.stdout = dis_output_file
dis.dis(method1)
dis.dis(method2)
sys.stdout = sys.__stdout__
sys.__stdout__
всегда ссылается на фактический стандартный вывод вашего приложения.
Конечно, если вы используете несколько потоков, этот подход потерпит неудачу.