Выполнение команды bash в скрипте python, вызванном из crontab - PullRequest
0 голосов
/ 23 марта 2020

Я пишу python скрипт, я хочу позвонить из crontab. Этот скрипт вызывает команду xrandr и сохраняет ее вывод в переменную, например так: output = subprocess.run('xrandr', shell=True, stdout=subprocess.PIPE).stdout.decode('utf-8') Я хочу, чтобы вывод xrandr был сохранен в строке. Это прекрасно работает, если я запускаю его из терминала, но если я запускаю его с помощью cron, переменная output остается пустой. остальная часть кода выполняется нормально, поэтому проблема не в cron. Итак, как я могу заставить эту команду выполняться правильно? спасибо за ваши предложения.

Ответы [ 2 ]

0 голосов
/ 23 марта 2020

Я предполагаю, что в среде cron переменная PATH не установлена, поэтому вы должны указать абсолютный путь к xrandr (вы можете найти его по which xrandr). Например, если этот путь /usr/bin/xrandr try

from subprocess import PIPE
output = subprocess.run('/usr/bin/xrandr', shell=True, stdout=subprocess.PIPE).stdout.decode('utf-8')
text = output.communicate()[0]
print(text)

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

0 голосов
/ 23 марта 2020

Вы хотите сохранить вывод, вы можете использовать communicate() здесь, чтобы помочь, вот так:

from subprocess import PIPE
output = subprocess.run('xrandr', shell=True, stdout=subprocess.PIPE).stdout.decode('utf-8')
text = output.communicate()[0]
print(text)

ИЛИ может быть, в этом случае вы можете удалить .stdout.decode('utf-8'), не слишком уверенный но это дает выстрел с и без него:

from subprocess import PIPE
output = subprocess.run('xrandr', shell=True, stdout=subprocess.PIPE).stdout.decode('utf-8')
print(output.stdout)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...