С Новым годом! Форум программистов, компьютерный форум, киберфорум
Python
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.72/124: Рейтинг темы: голосов - 124, средняя оценка - 4.72
исследователь
325 / 104 / 3
Регистрация: 18.03.2010
Сообщений: 1,079
Записей в блоге: 2

Запуск скрипта с ключами

28.07.2011, 16:39. Показов 26364. Ответов 14

Студворк — интернет-сервис помощи студентам
Мой скрипт приведенный здесь https://www.cyberforum.ru/pyth... ost1868544
выдает звуковой сигнал при наступлении определенного события.
А хотелось бы запускать свой скрипт иногда с ключом -s (silent) чтоб звуковой сигнал не выдавался, как обработать я сам сделаю - это будет просто skip модуля выдающего звуковой сигнал. А вот как узнать с какими ключами скрипт запускался? И сразу же - как в скрипте можно определить в какой папке он находится?
Заранее благодарен за подробное разъяснение.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
28.07.2011, 16:39
Ответы с готовыми решениями:

Запуск скрипта из скрипта
Возник вопрос, можно ли запустить python скрипт из другого python скрипта? Если да, то как?

Запуск скрипта из скрипта
нужно чтобы пользователь вводил строку в TexEdit и программа распознавала бы ввод и создавала переменные "на лету". ...

Запуск скрипта
код скрипта: #!/usr/bin/env python3 print("Content-type: text/html") print() print("<h1>Hello world!</h1>") положил...

14
Эксперт С++
 Аватар для Nameless One
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
28.07.2011, 17:44
Цитата Сообщение от XoFfiCEr Посмотреть сообщение
А хотелось бы запускать свой скрипт иногда с ключом -s (silent) чтоб звуковой сигнал не выдавался, как обработать я сам сделаю - это будет просто skip модуля выдающего звуковой сигнал. А вот как узнать с какими ключами скрипт запускался?
Ключи (параметры) командной строки находятся в списке sys.argv (первый элемент - имя программы-скрипта, остальные - ключи, которые переданы скрипту)
Можно разбирать их ручками, но это не круто. Есть высокоуровневый модуль optparse, который позволяет легко производить разбор параметров командной строки.

Цитата Сообщение от XoFfiCEr Посмотреть сообщение
И сразу же - как в скрипте можно определить в какой папке он находится?
в модуле os.path есть две функции. abspath(path) возвращает абсолютный путь для указанного path, dirname(path) - соответственно, директорию для пути path:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#!/usr/bin/env python3
 
from optparse import OptionParser
from sys import argv
from os.path import abspath, dirname
 
parser = OptionParser()
 
parser.add_option('-s', '--silent', dest='silent',
                  action='store_true', default=False,
                  help="don't make sound")
 
options, args = parser.parse_args()
 
if options.silent:
    print('Silent flag is set')
else:
    print('Silent flag is not set')
 
print('Script is launched from dir:', dirname(abspath(argv[0])))
 
if args:
    print('The rest args:', args)
Пример:
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
[nameless@desktop python]$ ./opts.py -h
Usage: opts.py [options]
 
Options:
  -h, --help    show this help message and exit
  -s, --silent  don't make sound
[nameless@desktop python]$ ./opts.py -s
Silent flag is set
Script is launched from dir: /home/nameless/samples/python
[nameless@desktop python]$ ./opts.py foo baar baaz
Silent flag is not set
Script is launched from dir: /home/nameless/samples/python
The rest args: ['foo', 'baar', 'baaz']
[nameless@desktop python]$
Обрати внимание на автоматически сгенерированное справочное сообщение.
1
Эксперт С++
 Аватар для Nameless One
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
28.07.2011, 17:58
Также есть традиционый никсовый getopt, но он, по понятным причинам, уступает модулю optparse
0
исследователь
325 / 104 / 3
Регистрация: 18.03.2010
Сообщений: 1,079
Записей в блоге: 2
29.07.2011, 04:17  [ТС]
Вот тут я не понял.
import os # это же надо писать?
from os.path import abspath, dirname #
mydir=os.abspath # так что ли? а какой аргумент в скобках писать?
print mydir #
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
29.07.2011, 06:52
Цитата Сообщение от XoFfiCEr
А вот как узнать с какими ключами скрипт запускался? И сразу же - как в скрипте можно определить в какой папке он находится?
Python
1
2
3
4
5
import sys
import os
 
print(sys.argv, '-p' in sys.argv)
print(os.getcwd())
Code
1
2
3
4
5
6
7
[guest@localhost tests]$ python3 t.py a b c
['t.py', 'a', 'b', 'c'] False
/home/guest/tmp/tests
[guest@localhost tests]$ python3 t.py a b c -p n
['t.py', 'a', 'b', 'c', '-p', 'n'] True
/home/guest/tmp/tests
[guest@localhost tests]$
0
Эксперт С++
 Аватар для Nameless One
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
29.07.2011, 11:05
Цитата Сообщение от XoFfiCEr Посмотреть сообщение
Вот тут я не понял.
import os # это же надо писать?
Зачем?
Читаем про синтаксис импорта в питоне.
Вкратце:
  1. директива "import ИМЯ_МОДУЛЯ" создает пространство имен ИМЯ_МОДУЛЯ и импортирует все объекты из модуля в это пространство имен. Чтобы получить доступ к объекту из модуля, придется указать имя созданного пространства имен. Например:
    Python
    1
    2
    3
    4
    
    import os.path # Импортируем все имена (объекты) из модуля os.path
                   # в созданное пространсвто имен os.path
     
    print(os.path.absname('foo.bar')) # Указываем простр-во имен (os.path) и имя функции (absname)
    в качестве альтернативы можно указать определенное имя для пространства имен:
    Python
    1
    2
    3
    
    import os.path as path
     
    print(path.absname('foo.bar'))
  2. директива "from ИМЯ_МОДУЛЯ import ИМЯ_1 [ИМЯ_2 ...]" импортирует имена ИМЯ_1, ИМЯ_2 и т.д. из модуля в глобальное пространсво имен (см. мой пример).
  3. директива "from ИМЯ_МОДУЛЯ import *" импортирует все имена из модуля в глобальное пространство имен
mydir=os.abspath # так что ли? а какой аргумент в скобках писать?
Не так. А в скобках писать имя файла или директории, абсолютный путь которой мы хотим узнать. Кстати, приведенный выше пример accept'a поудачней будет (про getcwd я как-то и не подумал)
И да, на всякий случай, если будут еще вопросы - python поставляется с отличной встроенной справочной системой
0
исследователь
325 / 104 / 3
Регистрация: 18.03.2010
Сообщений: 1,079
Записей в блоге: 2
29.07.2011, 14:03  [ТС]
Ну если я не знаю даже имени под каким будет скрипт, что я должен писать, какое имя?!
В Netbeans кстати откровенно плохая справочная система
0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
29.07.2011, 15:22
XoFfiCEr, Это как? Ты запускаешь скрипт и не знаешь с каким именем? Интересно. Либо запуск идет из другой программы? Но тогда тоже ты знаешь имя, правда во время выполнения но все же.
0
исследователь
325 / 104 / 3
Регистрация: 18.03.2010
Сообщений: 1,079
Записей в блоге: 2
29.07.2011, 16:17  [ТС]
Цитата Сообщение от ForEveR Посмотреть сообщение
XoFfiCEr, Это как? Ты запускаешь скрипт и не знаешь с каким именем? Интересно. Либо запуск идет из другой программы? Но тогда тоже ты знаешь имя, правда во время выполнения но все же.
Да, у меня много версий моего скрипта, и все с разными именами.
И потом они могут быть в разных папках.
0
Эксперт С++
 Аватар для Nameless One
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
29.07.2011, 17:16
Цитата Сообщение от XoFfiCEr Посмотреть сообщение
Ну если я не знаю даже имени под каким будет скрипт, что я должен писать, какое имя?!
еще раз говорю, смотри вариант, который предложил accept: функция getcwd из модуля os возвращает текущую директорию.
Мой же вариант, хоть и делал то же самое, выполнял это "окольными" путями: первый элемент списка argv из модуля os содержит имя твоего запущенного скрипта. Функция absname из модуля os.path преобразует этот путь (он может быть относительным или абсолютным) в абсолютный путь к запущенному скрипту. Функция dirname из модуля os.path выделял из этого абсолютного пути директорию (смотри строки "Script is launched from dir..." в примере использования).
Но, опять же повторюсь, вариант с getcwd будет предпочтительней

Цитата Сообщение от XoFfiCEr Посмотреть сообщение
Да, у меня много версий моего скрипта, и все с разными именами.
а вот это уже настораживает
0
исследователь
325 / 104 / 3
Регистрация: 18.03.2010
Сообщений: 1,079
Записей в блоге: 2
29.07.2011, 17:34  [ТС]
Цитата Сообщение от Nameless One Посмотреть сообщение
а вот это уже настораживает
Почему настораживает?!
0
Эксперт С++
 Аватар для Nameless One
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
29.07.2011, 18:03
XoFfiCEr, зачем иметь несколько вариантов скрипта, расположенных в множестве различных директорий?
0
исследователь
325 / 104 / 3
Регистрация: 18.03.2010
Сообщений: 1,079
Записей в блоге: 2
30.07.2011, 11:20  [ТС]
Цитата Сообщение от Nameless One Посмотреть сообщение
XoFfiCEr, зачем иметь несколько вариантов скрипта, расположенных в множестве различных директорий?
Есть папка oldversion где хранятся старые версии скрипта, я их не стираю на всякий случай.

Добавлено через 16 часов 42 минуты
Когда я еще с форточками работал, а не с Linux там в VB были две функции AppName и AppPath
первая выдает имя приложения, а вторая абсолютный путь к нему.
И это было удобно
0
исследователь
325 / 104 / 3
Регистрация: 18.03.2010
Сообщений: 1,079
Записей в блоге: 2
13.08.2011, 18:12  [ТС]
Как поступить если нужно передать с ключом некий параметр?
Скажем -p 5
0
Эксперт С++
 Аватар для Nameless One
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
13.08.2011, 18:33
А гуглить/документацию читать уже не модно?
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#!/usr/bin/env python3
 
import argparse
 
parser = argparse.ArgumentParser(description='Print an argument several times')
parser.add_argument('--count', '-c', dest='cnt', type=int,
                    default='0', metavar='CNT',
                    help='how much times argument is printed (default 0)')
parser.add_argument('value', metavar='VALUE')
 
args = parser.parse_args()
 
for i in range(args.cnt):
    print(args.value)
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
[nameless@desktop python]$ ./printer.py -h
usage: printer.py [-h] [--count CNT] VALUE
 
Print an argument several times
 
positional arguments:
  VALUE
 
optional arguments:
  -h, --help           show this help message and exit
  --count CNT, -c CNT  how much times argument is printed (default 0)
[nameless@desktop python]$ ./printer.py foo
[nameless@desktop python]$ ./printer.py foo --count 2
foo
foo
[nameless@desktop python]$ ./printer.py foo -c 5
foo
foo
foo
foo
foo
[nameless@desktop python]$
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
13.08.2011, 18:33
Помогаю со студенческими работами здесь

Запуск скрипта .ру
Приветствую Уважаемые форумчане. есть вдс сервер с ОС Debian7, на нем закреплен домен и есть соответственно каталоги папок. Когда...

Запуск скрипта в интерпретаторе
Здравствуйте, подскажите мне, пожалуйста, как в запущеном интерпритаторе вызвать скрипт? Не могу уяснить, почему, если я в командной...

Запланировать запуск скрипта
Подскажите как запустить скрипт в определенное время, прочитал, что для этого необходима библиотека cron,а как ей пользоваться, можете...

Запуск скрипта монитором событий
Доброго времени суток! Пишу скрипт для GSM модуля GL868 на Python Алгоритм следующий Основной скрипт настраивает модуль запускает монитор...

Запуск скрипта по модулю time
Добрый вечер. Можно сделать так, чтобы скрипт исполнялся каждые 30 минут? Только не кроном каким нибудь, а например в скрипте прописать...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru