2015-10-13 2 views
0

Я пишу сценарий Python, и я хотел бы его поведение зависит от того, кто звонит этот сценарий:Как определить, кто вызывает мой скрипт Python?

  • , если он вызывается из командного файла, я хочу сценарий Python, чтобы написать свой выход к журнальный файл.
  • Если это вызвано вручную из командной строки, я хочу, чтобы скрипт Python записывал свой вывод на экран.

Мой пакетник выглядит следующим образом:

python py_script.py 

Есть ли способ, чтобы это было сделано? Я посмотрел на os.environ.has_key(), но я не знаю, как это использовать.

+3

Почему бы просто не подключить вывод к журналу при вызове сценария в пакетном файле? –

+2

Или введите явный параметр для установки вывода/регистрации – jonrsharpe

ответ

0

Самый простой способ сделать это (как tobias_k замечания в комментариях) только к трубе в лог-файл при вызове из сценария

REM This is your batch file 
python py_script.py >> your_log_file.txt 

предложение Бруно в другой ответ, чтобы вытащить флаг из sys.argv конечно, действительно, но вы собираетесь в конечном итоге сделать много дубликатов кода. Тогда ваша кодовая база будет выглядеть так:

if LOGGING: 
    with open(PATH_TO_LOGFILE, 'a') as logf: 
     logf.write(some_txt) 
else: 
    print(some_txt) 

в любое время, когда у вас есть запрос на печать. В качестве альтернативы вы могли бы сделать некоторые НЕВЕРОЯТНО уродливые вещи, как

if __name__ == "__main__": 
    if LOGGING: 
     old_stdout = sys.sdout 
     with open(PATH_TO_LOGFILE, 'a') as logf: 
      sys.stdout = logf 
      main() 
     sys.stdout = old_stdout 

Честно говоря, это некрасиво и хак (и может даже не работать, я никогда не пытался переподчинить sys.stdout). Просто используйте перенаправление оболочки.

+0

Теперь, когда я увидел ваше первое предложение (на основе комментария Tobias_k), я не могу представить, что я думал, когда задавал этот вопрос. Я использовал перенаправление к выходному файлу, и он отлично работает. – Dominique

1

Просто передайте аргумент вашему сценарию, чтобы сообщить ему, где писать ... аргументы командной строки передаются в sys.argv. Есть пара пакетов в stdlib, чтобы справиться с ними, но вам может не понадобиться здесь, это единственный вариант для вашего скрипта.