Запустите скрипт Python из другого скрипта Python, работающего как демон - PullRequest
0 голосов
/ 07 февраля 2019

У меня есть небольшой файл Python, который просто выводит строку:

#!/usr/bin/env python
print("This is a Test")

Я могу вызвать этот скрипт Python из другого скрипта Python, например, так:

subprocess.call(['python', 'myPythonFile.py'])

И я вижу'Это тест' в моей исходной программе на Python.

Но я хочу вызвать этот скрипт из запущенного демона, как описано здесь: https://gist.github.com/andreif/cbb71b0498589dac93cb

Когда я ставлю вызов

    subprocess.call(['python', 'myPythonFile.py'])

В MyDaemon.Run я НЕ вижу выход.

Как я могу это сделать?

Ответы [ 3 ]

0 голосов
/ 07 февраля 2019

subprocess.call может отправить свой вывод в файл

tempfile = '/tmp/output.tmp' # better use mktemp

with open( tempfile, 'w') as output:
    response = subprocess.call(
         ['python', 'myPythonFile.py'], 
         stdout=output, 
         stderr=output,
    )
with open( tempfile, 'r') as output:
    # read what happened from output, and decide what to do next
    # or perhaps just feed it into your logging system
0 голосов
/ 11 февраля 2019

Процесс демона характеризуется отсутствием управляющего терминала, потому что он отделен от того, что запускает демон.Процесс демона по определению не подключен к какой-либо консоли.

Итак, если этот демон запускает другой процесс:

Я хочу вызвать этот скрипт из работающего демона

тогда управляющего терминала по-прежнему нет, и стандартный вывод по умолчанию подключен к нулевому устройству.

Вам потребуется, чтобы процесс демона организовал вывод своих данных где-нибудь.Например, файл журнала.

Попробуйте библиотеку python daemon для способа создания демонов и для назначения конкретных файлов (например, файла журнала, который вы открыли) дляоставаться открытым в процессе демона.

0 голосов
/ 07 февраля 2019

Попробуйте использовать функцию check_output, чтобы увидеть фактический вывод в вашей консоли

subprocess.check_output(['python', 'myPythonFile.py'])

Более подробную информацию вы можете найти в документах подпроцесса

...