Сломанная труба при запуске скрипта python - PullRequest
0 голосов
/ 09 марта 2020

На моем компьютере с Ubuntu 18 в моем каталоге / etc / systemd / system есть служба запуска, которая называется lidar.service.

[Unit]
After=network.target
StartLimitIntervalSec=0

[Service]
Type=simple
Restart=always
RestartSec=1
ExecStart=/usr/bin/sudo /usr/bin/python2.7 /home/lidar.py

[Install]
WantedBy=multi-user.target

Это относится к python скрипту с именем lidar.py, с которым я общаюсь через планшет. lidar.py начинает с того, что просит пользователя ввести di git 1-5, чтобы запустить определенный c процесс. После отправки di git скрипт lidar.py ссылается на второй скрипт, называемый maps.py, который запускает приложение на компьютере. Когда я отправляю «1» в скрипт lidar.py, он указывает maps.py инициализировать приложение на моем компьютере. После того, как приложение было инициализировано, maps.py создает канал для непрерывной связи, который выглядит примерно так:

init_cmd = ['./SystemStart.sh']

self.p = subprocess.Popen (init_cmd,
                           shell=True,
                           stdin=subprocess.PIPE,
                           stderr=subprocess.PIPE,
                           stdout=subprocess.PIPE)

self.p.stdin.write('run')

Я получаю сообщение «IOError: [Errno 32] Broken pipe», как только добираюсь до self.p.stdin.write ('run') строка. Этот кусок кода работает отлично, когда я запускаю его на переднем плане. Я дважды проверил все разрешения и не верю, что это проблема. Я пробовал с и без «подпроцесса», и это не решило. Я использую python 2.7, поэтому я не могу использовать connect () так, как позволяет python 3. Я думаю, что это может иметь какое-то отношение к stdin, так как эта проблема возникает только при запуске сценария в фоновом режиме или в качестве службы запуска.

Любые предложения / помощь, как решить эту проблему, будет принята с благодарностью !!

...