2009-08-16 3 views
2

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

EDIT: это может быть либо задание cron, либо начато пакетным файлом Windows через запланированные задачи.

+1

«Запланированные задачи» ? Началось с какой части программного обеспечения? Какая платформа? "Вручную?" Из IDLE? Из командной строки? Какая платформа? Какая оболочка? –

+0

Возможный дубликат [Проверка интерактивной оболочки в скрипте Python] (https://stackoverflow.com/questions/6108330/checking-for-interactive-shell-in-a-python-script) – ideasman42

ответ

7

Если вы хотите знать, если вы читаете из терминала (не ясно, если это достаточно различие, просьба уточнить), вы можете использовать

sys.stdin.isatty() 
11

Вы должны просто добавить параметр командной строки в запланированной задаче, и проверьте его в своем скрипте, изменив поведение, если это необходимо. Явный лучше, чем неявный.

Одно из преимуществ этой конструкции: вы сможете протестировать оба поведения, независимо от того, как вы действительно вызывали скрипт.

+0

Согласовано. Обычно запускайте сценарий с помощью awesomeApp и в качестве пакетного задания с awesomeApp --batch. – scvalex

0

я просто добавить параметр командной строки, когда вы вызываете его с хрон:

питон yourscript.py -scheduled

то в вашей программе

import sys 

if "-scheduled" in sys.argv: 
    #--non-interactive code-- 
else: 
    #--interactive code-- 
+1

, по крайней мере, используют обычные "--плановые" –