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

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

28.07.2011, 16:39. Показов 26492. Ответов 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 / 3287 / 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
Ответ Создать тему
Новые блоги и статьи
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru