2015-10-01 1 views
0

Прежде всего, я хочу извиниться за попытку сделать это. Я знаю, что это никоим образом не рекомендуется. Однако внешние ограничения оставляют мне немного другого выбора, чем идти по этому пути.как сделать python игнорировать опцию -tt

У меня есть часть кода на основе python, которая лежит на файловой системе только для чтения. Я не могу его переместить. Я не могу его изменить. Он имеет непоследовательное использование вкладок и пробелов. И мне нужен этот код для импорта с опцией -tt.

Есть ли способ игнорировать опцию -tt для конкретного оператора import, определенного раздела кода или определенного приложения?

+0

Вы могли бы скопировать его в другом месте и изменить эту копию? – Lynch

+0

Файл является частью более крупной версии программного обеспечения и импортируется через длинную цепочку. Следовательно, мне нужно будет скопировать весь выпуск в локальное пространство, чтобы выполнить эту работу. Так как код должен работать в пакетной системе, это не вариант, так как это будет означать копирование нескольких сотен мегабайт кода за каждый раз, когда код запускается на любом пакетном узле. – carsten

+2

Попросите поставщика исправить свое программное обеспечение - я бы не полагался на код python, который «имеет непоследовательное использование вкладок и пробелов». –

ответ

1

Я полностью признаю, что это ужасное, ужасное решение. Я жду downvotes:

dodgymodule.py:

def somefunc(): 
     print("This is indented using 4 spaces") 
     print("This is indented using a tab") 

главного питон скрипт, который использует autopep8 исправить код и импортировать получившуюся строку вместо:

import autopep8 
import imp 

try: 
    import dodgymodule 
except TabError as e: 
    with open(e.filename, 'r') as f: 
     new_module_contents = autopep8.fix_code(f.read()) 
     dodgymodule = imp.new_module('dodgymodule') 
     exec(new_module_contents, dodgymodule.__dict__) 

dodgymodule.somefunc() 

python3 -tt script.py печатает строку , как надеялись.