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

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

28.07.2011, 16:39. Показов 26375. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
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? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru