Запустить скрипт python без вызова интерпретатора [duplicate]

Нет. Это так просто. Конечный автомат (который представляет собой структуру данных, лежащую в основе регулярного выражения) не имеет памяти, кроме состояния, в котором он находится, и если у вас есть произвольно глубокое вложение, вам нужен произвольно большой автомат, который сталкивается с понятием конечный автомат.

Вы можете сопоставлять вложенные / парные элементы с фиксированной глубиной, где глубина ограничена только вашей памятью, потому что автомат становится очень большим. На практике, однако, вы должны использовать push-down automaton, т. Е. Синтаксический анализатор для контекстно-свободной грамматики, например LL (сверху вниз) или LR (снизу вверх). Вы должны учитывать худшее поведение во время выполнения: O (n ^ 3) по сравнению с O (n), с n = длина (ввод).

Существует множество генераторов синтаксического анализатора, например ANTLR для Java. Найти существующую грамматику для Java (или C) также не сложно. Для получения дополнительной информации: Теория автоматов в Википедии

7
задан Piotr Dobrogost 3 October 2012 в 20:35
поделиться

6 ответов

Вы можете добавить shebang в первую строку скрипта:

#!/usr/bin/env python

Это сообщит вашей текущей оболочке, какая команда должна кормить сценарий.

26
ответ дан efritz 21 August 2018 в 04:55
поделиться
  • 1
    Кроме того, не забудьте отметить ваш файл как исполняемый файл. (chmod +x SQLsap на ОС POSIX.) – Mike DeSimone 3 August 2010 в 21:11
  • 2
    ах, так вот что это делает. Я видел это раньше, но никогда не знал. Благодаря! – Narcolapser 3 August 2010 в 21:39
  • 3
    Кроме того, я хотел бы отметить, что / usr / bin / env сама по себе является программой. Он используется для определения *, где имеется конкретный исполняемый файл. Если вы знаете, где ваш интерпретатор python (например, / usr / bin / python), вы можете просто заменить shebang следующим образом: #! / USR / бен / питон. Это также подходит для любой исполняемой команды - perl, python, bash и т. Д. – efritz 30 August 2010 в 02:23
  • 4
    Что обычно происходит, когда скрипт python, даже с #!/usr/bin/env python и исполняемыми правами, терпит неудачу? Из командной строки мне все еще нужно поставить python в начале командной строки ... – Thomas Matthew 30 September 2015 в 02:21

Предполагая, что это находится в системе unix, вы можете добавить «shebang» в верхней части файла следующим образом: #!/usr/bin/env python

И затем установить исполняемый флаг следующим образом: chmod +x SQLsap

3
ответ дан baloo 21 August 2018 в 04:55
поделиться

В unix вы используете строку shebang в начале вашего скрипта:

#!/usr/bin/env python

делают исполняемый файл:

chmod +x arbitraryname

и помещают его в каталог на ваш PATH (может быть символической ссылкой):

cd ~/bin/
ln -s ~/some/path/to/myscript/arbitraryname

В Windows файлы, такие как * .py, по умолчанию были открыты с python.exe. (Если нет, вы можете установить вручную.) Таким образом, вы можете напрямую запускать * .py-файлы в консоли.

Обратите внимание:

В окнах текст нового кода строки «\r \n ", но в unix это"\n ". Если ваш скрипт python является форматом Windows, тогда выполнение в unix будет сообщать об ошибке «Нет такого файла или каталога». Чтобы устранить эту проблему, просто замените все «\r\n» на «\n» в unix будет нормально.

0
ответ дан cfh008 21 August 2018 в 04:55
поделиться

В Windows или DOS вы можете приблизиться, поставив свой код на Python в такой .BAT-файл.

rem = ''' this line interpreted by BAT and PYTHON
@REM BAT-ONLY code begins now inside PYTHON comment
@echo off
python "%~dpnx0" %*
goto :eof
@REM CMD-ONLY code ends
'''

import sys
print sys.path

К сожалению, я не могу избавиться от сообщения первой строки на выходе , но вы всегда можете изменить текст после '' ', чтобы быть чем-то вроде имени приложения, и люди не заметили бы.

В идеале вы не ставили бы много кода Python в .BAT-файл, но импортирует файл .py и затем запускает его метод .__main__.

2
ответ дан Michael Dillon 21 August 2018 в 04:55
поделиться
  • 1
    Хороший взлом, но я думаю, что официальное > решение состоит в том, чтобы связать расширения скриптов Python с интерпретатором Python. – Piotr Dobrogost 3 October 2012 в 21:04

Вы хотите shebang. #!/path/to/python. Поместите это в первую строку вашего скрипта python. #! на самом деле является магическим числом, которое сообщает операционной системе интерпретировать файл как скрипт для названной программы. Вы можете поставить /usr/bin/python или, чтобы быть более портативным, /usr/bin/env python, который вызывает программу /usr/bin/env, и сообщает ему, что вы хотите установить интерпретатор Python системы.

Вам также нужно будет поместить свой скрипт на вашем пути, если вы не набрали текст ./SQLsap args.

4
ответ дан nmichaels 21 August 2018 в 04:55
поделиться

Другой способ сделать это - упаковать ваш скрипт python.

Тогда все, что вам нужно сделать, это запустить $ pip install package-name, и просто запустить $ package-name из любой директории выполнит ваш скрипт python.

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

Я написал простой скрипт QuickPackage , который может мгновенно создать и загрузить пакет python для вашего удивительного скрипта, просто введя путь вашего скрипта python.

Пример:

$ pip install quickpackage

Использование:

Использование Просто запустите quickpackage и введите путь к вашему скрипту python.

Пример:

❯ quickpackage                                                    
Enter name: quickpackage
Enter version: 1.1
Enter description: Instantly create and upload python package for your script
Enter github url: https://github.com/yask123/quick-package
enter author: Yask Srivastava
Enter email: yask123@gmail.com
Path of python script file: run.py
running register
....
running upload
Submitting dist/quickpackage-1.1.tar.gz to https://pypi.python.org/pypi
Server response (200): OK

Теперь просто запустите свой скрипт, запустив $ quickpackage (В этом случае)

1
ответ дан yask 21 August 2018 в 04:55
поделиться
Другие вопросы по тегам:

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