«execfile» не определен в конфигурации apache2 [duplicate]

Вы не можете разобрать HTML-код [X] с регулярным выражением. Поскольку HTML не может быть проанализирован с помощью регулярных выражений. Regex не является инструментом, который можно использовать для правильного анализа HTML. Поскольку я уже много раз отвечал в вопросах HTML-и-regex, использование регулярных выражений не позволит вам потреблять HTML. Регулярные выражения - это инструмент, который недостаточно совершенен для понимания конструкций, используемых HTML. HTML не является регулярным языком и, следовательно, не может быть проанализирован регулярными выражениями. Запросы Regex не имеют возможности разбивать HTML на его значимые части. так много раз, но это не доходит до меня. Даже расширенные нерегулярные регулярные выражения, используемые Perl, не справляются с задачей анализа HTML. Вы никогда не заставите меня взломать. HTML - это язык достаточной сложности, который не может быть проанализирован с помощью регулярных выражений. Даже Джон Скит не может анализировать HTML, используя регулярные выражения. Каждый раз, когда вы пытаетесь проанализировать HTML с регулярными выражениями, нечестивый ребенок плачет кровью девственниц, а русские хакеры выкладывают ваш webapp. Разбор HTML с регулярным выражением вызывает тайные души в царство живых. HTML и регулярное выражение идут вместе, как любовь, брак и ритуал детоубийства. «Центр» не может удерживать слишком поздно. Сила регулярных выражений и HTML вместе в одном и том же концептуальном пространстве уничтожит ваш разум как много водянистую замазку. Если вы анализируете HTML с регулярным выражением, вы даете им и их богохульные способы, которые обрекают нас всех на бесчеловечные труды для Того, чье имя не может быть выражено на Основном многоязычном плане, он приходит. HTML-plus-regexp сжигает n erves разумного, пока вы наблюдаете, ваша психика увядает в натиске ужаса. Основанные на языке Rege̿̔̉x HTML-парсеры - это рак, который убивает StackOverflow, слишком поздно, что слишком поздно мы не можем спасти trangession of child, гарантирует, что регулярное выражение будет потреблять всю живую ткань (за исключением HTML, который он не может, как ранее пророчествовал) дорогой лорд помогите нам, как кто-либо сможет выжить в этом бедствии, используя регулярное выражение для анализа HTML, обрек человечество на вечность страшных пыток и дыр в безопасности, используя регулярное выражение в качестве инструмента для обработки HTML, устанавливает нарушение между этим миром и областью страха сущностных сущностей (например, SGML-сущностей , но более коррумпированный), простое представление о мире reg ex parsers для HTML будет вставлять , тантьё переносить сознание программиста в мир непрестанного крика, он приходит, зловонная слизистая регулярная инфекция wil l пожирайте ваш парсер, приложение и существование в HT ML на все время, например Visual Basic, только хуже, он приходит, не делает h e com̡e̶s, ̕h̵i s неудовлетворительное радианское разрушение все улучшения, HTML-теги lea͠ki̧n͘g fr̶ǫm ̡yo ͟ur eye͢s̸ ̛l̕ik͏e liq uid pain, песня reggular exp ression parsing будет распространять голоса mor tal man из sp здесь я вижу, что вы можете видеть, что это красиво. f inal snuf пальцы лжи s человека ALL IS LOŚ͖̩͇̗̪̏̈T A LL I SL OST pon̷y он приходит, он c̶̮omes он co mes the ich или пронизывает весь МОЙ ЛИЦ МОЙ ЛИЦО ᵒh god n o NO NOO̼ O ON Θ остановить a * ̶͑̾̾ ̅ͫ͏̙̤g͇̫͛͆̾ͫ̑͆l͖͉̗̩̳̟̍ͫͥͨe̠̅s ͎a̧͈͖r̽̾̈́͒͑e n ot rè̑ͧ̌aͨl̘̝̙ͤ̾̆ ZA̡͊͠͝LGΌ ISͮ҉̯͈͕̹̘ T O͇̹̺Ɲ̴ȳ̳ TH̘ Ë͖̉ ͠P̯͍̭O̚ N̐Y̡ H̸̡̪̯ͨ͊̽̅̾Ȩ̬̩̾͛ͪ̈͘ ̶̧̨̹̭̯ͧ̾ͬC̷̙̝͖ͭ̏ͥͮ͟Oͮ͏̮̪̝͍M̖͊̒ͪͩͬ̚̚͜Ȇ̴̟̟͙̞ͩ͌͝ S̨̥̫͎̭ͯ̿̔

< hr>

Вы пробовали использовать синтаксический анализатор XML в stead?


Замечание модератора

Это сообщение заблокировано, чтобы предотвратить нежелательные изменения его содержимого. Сообщение выглядит так, как должно выглядеть - проблем с его содержанием нет. Пожалуйста, не помещайте это для нашего внимания.

238
задан ideasman42 15 January 2017 в 07:15
поделиться

12 ответов

В соответствии с документацией вместо

execfile("./filename") 

Используйте

exec(open("./filename").read())

См.:

250
ответ дан Steven Vascellaro 15 August 2018 в 19:25
поделиться
  • 1
    Любая идея, почему они это сделают? Это гораздо более многословно, чем раньше. Кроме того, это не работает для меня на Python3.3. Я получаю & quot; Нет такого файла или каталога & quot; когда I exec (open ('./ some_file'). read ()). Я попытался включить расширение «.py», а также исключить «./» – JoeyC 20 February 2014 в 02:20
  • 2
    Да, эти дополнительные 9 персонажей действительно разрушают мой проект! – Jonathan Hartley 5 September 2014 в 22:26
  • 3
    Работал для меня с Python 3.4 и Django 1.8 – cameron-f 21 July 2015 в 17:44
  • 4
    Менее тривиально это не указывает номера строк, когда возникают исключения, как и execfile (). – KDN 27 July 2015 в 19:57
  • 5
    Вам нужно будет close обработать этот файл. Еще одна причина не любить изменение от python 2. – Rebs 19 October 2015 в 05:02

Вот что я имел (file уже назначен пути к файлу с исходным кодом в обоих примерах):

execfile(file)

Вот что я заменил на него:

exec(compile(open(file).read(), file, 'exec'))

Моя любимая часть: вторая версия отлично работает как в Python 2, так и в 3, то есть нет необходимости добавлять в зависимую от версии логику.

6
ответ дан ArtOfWarfare 15 August 2018 в 19:25
поделиться

Я просто новичок здесь, поэтому, может быть, это просто удача, если я нашел это:

После попытки запустить скрипт из приглашения интерпретатора >>> с помощью команды

    execfile('filename.py')

, для которого я получил «NameError: name« execfile », не определен» Я попробовал очень простой

    import filename

, он работал хорошо: -)

Надеюсь, это может быть полезной и поблагодарить всех за отличные подсказки, примеры и все те мастерски прокомментированные фрагменты кода, которые являются большим вдохновением для новичков!

Я использую Ubuntu 16.014 LTS x64. Python 3.5.2 (по умолчанию, 17 ноября 2016, 17:05:23) [GCC 5.4.0 20160609] на linux

1
ответ дан Claude 15 August 2018 в 19:25
поделиться
  • 1
    @StephenRauch OP фактически не был явно о том, что они хотели сделать. – neuronet 10 June 2017 в 03:07

Обратите внимание, что приведенный выше шаблон не будет работать, если вы используете объявления кодировки PEP-263, которые не являются ascii или utf-8. Вам нужно найти кодировку данных и правильно закодировать ее перед передачей ее exec ().

class python3Execfile(object):
    def _get_file_encoding(self, filename):
        with open(filename, 'rb') as fp:
            try:
                return tokenize.detect_encoding(fp.readline)[0]
            except SyntaxError:
                return "utf-8"

    def my_execfile(filename):
        globals['__file__'] = filename
        with open(filename, 'r', encoding=self._get_file_encoding(filename)) as fp:
            contents = fp.read()
        if not contents.endswith("\n"):
            # http://bugs.python.org/issue10204
            contents += "\n"
        exec(contents, globals, globals)
5
ответ дан Eric 15 August 2018 в 19:25
поделиться
  • 1
    Что такое «вышеупомянутый шаблон»? Используйте ссылки, ссылаясь на другие сообщения в StackOverflow. Относительные условия позиционирования, такие как «выше» не работают, поскольку существует 3 разных способа сортировки ответов (по голосам, по дате или по активности), а наиболее распространенный (по голосам) является изменчивым. Со временем ваш пост и сообщения вокруг вас будут иметь разные баллы, то есть они будут перегруппированы, и такие сравнения будут менее полезными. – ArtOfWarfare 7 October 2014 в 14:15
  • 2
    Очень хорошая точка. И учитывая, что я написал этот ответ почти полгода назад, я предполагаю, что «выше шаблона» Я имел в виду stackoverflow.com/a/2849077/165082 (к сожалению, вам нужно щелкнуть по нему), или, что еще лучше, ответ Noam: – Eric 7 October 2014 в 18:33
  • 3
    Обычно, когда я хочу ссылаться на другие ответы на один и тот же вопрос из моего ответа, я печатаю «Ответ Noam» & quot; (например) и связать текст с ответом, на который я имею в виду, просто для случая, когда ответ будет отключен от пользователя в будущем IE, потому что пользователь меняет имя своей учетной записи, или сообщение становится общедоступной вики, потому что слишком на нем было сделано много изменений. – ArtOfWarfare 7 October 2014 в 18:37
  • 4
    Как вы получаете URL-адрес определенного «ответа»? с сообщением, за исключением имени плаката ответа? – DevPlayer 8 April 2015 в 14:42
  • 5
    Просмотрите источник и получите идентификатор. Например, ваш вопрос будет stackoverflow.com/questions/436198/… . Я все для лучшего метода, но ничего не вижу, когда я нахожусь рядом с комментарием – Eric 8 April 2015 в 19:07

Вы можете написать свою собственную функцию:

def xfile(afile, globalz=None, localz=None):
    with open(afile, "r") as fh:
        exec(fh.read(), globalz, localz)

Если вам действительно нужно ...

187
ответ дан Honest Abe 15 August 2018 в 19:25
поделиться
  • 1
    +1, но пример должен, вероятно, использовать 'с fh = open (...):' – orip 12 January 2009 в 19:44
  • 2
    Это работает для меня. Однако я заметил, что вы написали локальные и глобальные аргументы в неправильном порядке. Это на самом деле: exec (object [, globals [, locals]]). Конечно, если бы у вас были аргументы, перевернутые в оригинале, тогда 2to3 произведет именно то, что вы сказали. :) – Nathan Shively-Sanders 21 May 2009 в 21:27
  • 3
    @orip: Нет, не следует. У вас не может быть назначение в выражении в python. – nosklo 22 August 2009 в 14:32
  • 4
    -1: статус exec не работает таким образом. Код не запускается ни в одной из версий python. – nosklo 22 August 2009 в 14:33
  • 5
    -1: Не достоверно. Некоторые использования execfile несовместимы. – Brian 27 December 2009 в 11:30
  • 6
    -1: значения параметров по умолчанию оцениваются во время определения функции, делая оба параметра globals и locals указывающими на глобальное пространство имен для модуля, содержащего определение execfile(), а не на глобальное и локальное пространство имен вызывающего. Правильный подход состоит в том, чтобы использовать None в качестве значения по умолчанию и определять глобальные и локальные объекты вызывающего абонента через возможности интроспекции модуля inspect. – Sven Marnach 3 November 2011 в 15:20
  • 7
    Было приятно узнать, что, если вы можете опустить global_vars и local_vars, замена python3 здесь также работает под python2. Несмотря на то, что exec является выражением в python2, exec(code) работает, потому что parens просто игнорируются. – medmunds 5 March 2013 в 07:25
  • 8
    Это ... очень уродливо. Любая идея, почему они избавились от execfile () в 3.x? execfile также упростил передачу командной строки args. – aneccodeal 27 March 2015 в 00:29
  • 9
    Используйте runpy . И проголосуйте за лучший ответ ниже stackoverflow.com/a/24261031/10840 – millerdev 11 July 2015 в 14:18
  • 10
    open("somefile.py") может быть неверным, если somefile.py использует кодировку символов, отличную от locale.getpreferredencoding(). tokenize.open() можно использовать вместо этого. – jfs 23 March 2016 в 15:39

Хотя exec(open("filename").read()) часто задается как альтернатива execfile("filename"), он пропускает довольно много деталей, которые поддерживаются execfile.

Следующая функция для Python3.x находится как можно ближе получить то же поведение, что и выполнение файла напрямую.

Примечания:

  • Использует двоичное чтение, чтобы избежать проблем с кодированием
  • Гарантировано закрытие файла (Python3 .x предупреждает об этом)
  • определяет __main__, некоторые сценарии зависят от этого, чтобы проверить, загружаются ли они как модуль или нет, например. if __name__ == "__main__"
  • настройка __file__ лучше подходит для сообщений об исключениях, а некоторые скрипты используют __file__ для получения путей к другим файлам по отношению к ним.
  • принимает необязательные глобальные переменные & amp; Локальные аргументы, изменяя их на месте по мере того, как execfile делает - поэтому вы можете получить доступ к любым переменным, определяемым путем чтения переменных после запуска.
def execfile(filepath, globals=None, locals=None):
    if globals is None:
        globals = {}
    globals.update({
        "__file__": filepath,
        "__name__": "__main__",
    })
    with open(filepath, 'rb') as file:
        exec(compile(file.read(), filepath, 'exec'), globals, locals)

# execute the file
execfile("/path/to/somefile.py")

Примечание: в отличие от execfile Python2, это не изменяет текущее пространство имен по умолчанию. Для этого вам нужно явно передать globals().

28
ответ дан ideasman42 15 August 2018 в 19:25
поделиться
  • 1
    Этот покрывает землю, пропущенную другими, но томится ниже множества других ответов. – javadba 23 February 2017 в 19:36

Как недавно , предложенный в списке рассылки python-dev , модуль runpy может оказаться жизнеспособной альтернативой. Цитата из этого сообщения:

https://docs.python.org/3/library/runpy.html#runpy.run_path

import runpy
file_globals = runpy.run_path("file.py")

Есть тонкие отличия от execfile:

  • run_path всегда создает новое пространство имен. Он выполняет код как модуль, поэтому нет никакой разницы между глобальными и локальными (поэтому есть только аргумент init_globals). Возвращаются глобальные переменные. execfile, выполняемые в текущем пространстве имен или в указанном пространстве имен. Семантика locals и globals, если они были заданы, были схожи с локалями и глобалами внутри определения класса.
  • run_path может не только выполнять файлы, но также яйца и каталоги (см. документация для деталей).
39
ответ дан Jonas Wielicki 15 August 2018 в 19:25
поделиться
  • 1
    По какой-то причине он выводит на экран много информации, которую ему не было предложено печатать (« builtins » и т. Д. В Anaconda Python 3). Есть ли способ отключить это, чтобы визуализировать только информацию, которую я выдаю с помощью print ()? – John Donn 8 January 2017 в 13:00
  • 2
    Можно ли также получить все переменные в текущем рабочем пространстве вместо того, чтобы все они были сохранены в file_globals? Это позволило бы сохранить тип file_globals['...'] для каждой переменной. – Adriaan 17 August 2017 в 08:03
  • 3
    @Adriaan globals().update(file_globals) – Jonas Wielicki 11 April 2018 в 08:54

Это лучше, так как он принимает глобальные и локальные от вызывающего:

import sys
def execfile(filename, globals=None, locals=None):
    if globals is None:
        globals = sys._getframe(1).f_globals
    if locals is None:
        locals = sys._getframe(1).f_locals
    with open(filename, "r") as fh:
        exec(fh.read()+"\n", globals, locals)
16
ответ дан Noam 15 August 2018 в 19:25
поделиться

Кроме того, хотя и не является чистым решением Python, если вы используете IPython (как вам, вероятно, так или иначе), вы можете сделать:

%run /path/to/filename.py

. Это одинаково легко.

3
ответ дан R S 15 August 2018 в 19:25
поделиться

Если скрипт, который вы хотите загрузить, находится в том же каталоге, что и тот, который вы запустили, возможно, «импорт» выполнит задание?

Если вам необходимо динамически импортировать код, встроенная функция __ import __ , а модуль imp стоит посмотреть.

>>> import sys
>>> sys.path = ['/path/to/script'] + sys.path
>>> __import__('test')
<module 'test' from '/path/to/script/test.pyc'>
>>> __import__('test').run()
'Hello world!'

test.py:

def run():
        return "Hello world!"

Если вы используя Python 3.1 или более позднюю версию, вы также должны взглянуть на importlib .

11
ответ дан Tim Lesher 15 August 2018 в 19:25
поделиться

найдите маршрут установки вашей папки (у меня она есть в C: \ python34), а затем выполните на регулярной CMD-оболочке

   set path=%path%;c:\python34

сейчас, когда вы инициализируете оболочку, переходите к C: \ python34 \ myscripts и используйте классическую команду

 python filename.py 
-2
ответ дан Weapon X 15 August 2018 в 19:25
поделиться
187
ответ дан Honest Abe 5 September 2018 в 18:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: