Создание терминальной программы с помощью Python
Недавно я начал изучать питон. Я создал некоторые базовые webapps с Django и написал несколько простых скриптов. После использования VIM в качестве Python IDE я действительно упал, я обожаю «Терминальные программы» (есть ли официальный термин для этого?). Сейчас я способен делать простые вещи, например, задавать возраст кому-то и печатать его на экране. Однако это сводится к запуску сценария .py, и после этого сценария выполняется нормальное возвращение bash. Я хотел бы создать программу, которую я могу запустить из командной строки, и это позволит использовать тот же пользовательский интерфейс, что и VIM (тот, который вы открываете и закрываете). Например, я создал простой скрипт для импорта RSS-каналов. Было бы здорово, если бы я мог открыть свой тип терминала, имя моей программы -> program open -> Then, я бы хотел использовать команды вроде: findomething. В основном есть реальное взаимодействие с моей программой.
Заключить:
- Как мне приступить к созданию такой программы?
- Какие модули, книги или сайт вы бы порекомендовали
- Командная строка Windows Не работает с Python
- Лучшая практика для рекурсивного консольного инструмента в Python
- Ошибка запроса Python / MySQL: `Неизвестный столбец`
- Control-Alt-Delete из python или командной строки
- Как принять строку, начинающуюся с # в python?
Истинная программа командной строки – это что-то в духе ls
или grep
; он запускается из командной строки, но он неинтерактивен и может использоваться в конвейерах и в сочетании с другими программами. Типичная программа командной строки не имеет интерактивного пользовательского опыта, вместо этого полагаясь на историю оболочки и файл инициализации для настройки.
То, что вы хотите создать, – это приложение curses , которое использует все возможности TTY в качестве интерактивной платформы, к лучшему или к худшему. Чтобы сделать это, найдите проклятия .
В системе * nix (linux / unix),
если вы:
$ chmod 0744 your_file.py -rwxr--r-- your_file.py
и добавьте путь к python как первую строку your_file.py
:
#!/usr/bin/python
или (в моем случае):
#!/usr/local/bin/python
Как только вы это сделаете, вместо этого выполните следующее:
$ python your_file.py
Вы можете запустить его следующим образом:
$ ./your_file.py
или даже переименовать его в свой yourfile
и запустить его следующим образом:
$ ./yourfile
и если вы затем скопируете yourfile
в свою корзину (т.е. #!/usr/bin/
или #!/usr/local/bin/
), вы можете запустить его следующим образом:
$ yourfile
Тогда ты можешь…
Используйте raw_input()
для запроса и получения ввода от пользователя.
your_file.py
:
#!/usr/local/bin/python import os while(True): # cntrl-c to quit input = raw_input('your_prompt$ ') input = input.split() if input[0] == 'ls': dire = '.' if len(input) > 1: dire = input[1] print('\n'.join(os.listdir(dire))) else: print('error')
в#!/usr/local/bin/python import os while(True): # cntrl-c to quit input = raw_input('your_prompt$ ') input = input.split() if input[0] == 'ls': dire = '.' if len(input) > 1: dire = input[1] print('\n'.join(os.listdir(dire))) else: print('error')
your_file.py
использования your_file.py
:
$ chmod 744 your_file.py $ cp your_file.py /usr/local/bin/your_file $ your_file your_prompt$ ls list_argv.py your_file.py your_ls.py your_subprocess.py your_prompt$ ls . list_argv.py your_file.py your_ls.py your_subprocess.py your_prompt$ pwd error your_prompt$ ^CTraceback (most recent call last): File "/usr/local/bin/your_file", line 7, in <module> input = raw_input('your_prompt$ ') KeyboardInterrupt $
Возьмите аргументы с sys.argv
из командной строки при запуске скрипта:
list_argv.py
:
#!/usr/local/bin/python import sys print(sys.argv)
list_argv.py
использования list_argv.py
:
$ python list_argv.py ['list_argv.py'] $ python list_argv.py hello ['list_argv.py', 'hello'] $ python list_argv.py hey yo ['list_argv.py', 'hey', 'yo'] $ chmod 744 list_argv.py $ ./list_argv.py ['./list_argv.py'] $ ./list_argv.py hi ['./list_argv.py', 'hi'] $ ./list_argv.py hey yo ['./list_argv.py', 'hey', 'yo'] $ cp list_argv.py /usr/local/bin/list_argv $ list_argv hey yo ['/usr/local/bin/list_argv', 'hey', 'yo']
Замените raw_input()
на sys.argv
.
'Your_ls.py':
#!/usr/local/bin/python import sys import os dire = '.' if len(sys.argv) > 1: dire = sys.argv[1] print('\n'.join(os.listdir(dire)))
Пример использования «your_ls.py»:
$ chmod 744 your_ls.py $ cp your_ls.py /usr/local/bin/your_ls $ your_ls list_argv.py your_file.py your_ls.py your_subprocess.py $ your_ls . list_argv.py your_file.py your_ls.py your_subprocess.py $ your_ls blah Traceback (most recent call last): File "/usr/local/bin/your_ls", line 9, in <module> print('\n'.join(os.listdir(dire))) OSError: [Errno 2] No such file or directory: 'blah'
Используйте subprocess.Popen
для доступа к любым возможностям из командной строки.
your_subprocess.py
:
#!/usr/local/bin/python import os import subprocess while(True): # cntrl-c to quit input = raw_input('your_prompt$ ') process = subprocess.Popen(input, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) out, err = process.communicate() print(out) print(err)
в#!/usr/local/bin/python import os import subprocess while(True): # cntrl-c to quit input = raw_input('your_prompt$ ') process = subprocess.Popen(input, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) out, err = process.communicate() print(out) print(err)
your_subprocess.py
использования your_subprocess.py
:
$ chmod 744 your_subprocess.py $ cp your_subprocess.py /usr/local/bin/your_subprocess $ your_subprocess your_prompt$ ls list_argv.py your_file.py your_ls.py your_subprocess.py your_prompt$ ls . list_argv.py your_file.py your_ls.py your_subprocess.py your_prompt$ pwd /Users/ox/_workspace/cmd_ln your_prompt$ blah /bin/sh: blah: command not found your_prompt$ ^CTraceback (most recent call last): File "/usr/local/bin/your_subprocess", line 8, in <module> input = raw_input('your_prompt$ ') KeyboardInterrupt $
ПЕРЕМЕЩЕНИЕ!
😀
ПОВЕСЕЛИСЬ!
-ox
Вы должны взглянуть на модуль cmd .
См. Поваренную книгу Python для примеров ее использования.
Самый простой способ сделать интерактивное консольное приложение:
while True: command = raw_input('command? ').strip() if command == 'say_hello': print('Hello') elif command == 'other_thing': print('Doing something else') elif command == 'quit': break else: print('Invalid Command.')
Это основная структура. Если вы хотите что-то более vim-like, вам, вероятно, понадобится использовать библиотеку curses.
Если вы хотите создать автономный двоичный код для системы UNIX, используйте функцию « freeze
. Если вы хотите один для системы Windows, посмотрите на py2exe
. Чтобы управлять местоположениями вывода на экране, используйте модуль curses
.
- Какой пакет Eclipse можно скачать для pydev?
- Каков правильный способ сортировки операторов Python `import x` и` from x import y`?
- Как поймать вывод функции matlab из python
- Есть ли более pythonic способ открыть файл, если он указан как аргумент или stdin, если нет?
- Как узнать, запущена ли программа из командной строки или из Интернета?
- Как проверить, завершена ли печать PDF в командной строке linux
- Как узнать, был ли запущен скрипт python с использованием опции -m интерпретатора?
- Обтекание приложения интерактивной командной строки в скрипте python
- Как я могу получить python в командной строке в Windows?
- Пользовательские аргументы командной строки в python
- Как сделать перенаправление вывода оболочки (>), когда скрипт все еще запущен?