Процесс с подпроцессным модулем никогда не останавливается

1

Я только начал использовать модуль подпроцесса на Python 3, и я не могу понять, как именно он работает. Это функция, которую я написал для включения и выключения портов USB. Это работает, но потом работает бесконечно, и я не могу ничего сделать, пока не заставлю его остановиться с помощью Ctrl + C. Печатные операторы также никогда не вызывают:

def usb_power_toggle(s):
    power_off, power_on = "echo '1-1' |sudo tee sys/bus/usb/drivers/usb/unbind", "echo '1-1' |sudo tee /sys/bus/usb/drivers/usb/bind"
    if s == "off":
        subprocess.run(power_off, shell = True)
        print("USB power off!")
    elif s == "on":
        subprocess.run(power_on, shell = True)
        print("USB power on!")
    else:
        raise ValueError

Кто-нибудь понимает в чем проблема? Не могли бы вы сказать мне, как закрыть процесс после того, как он делает то, что должен?

  • 0
    Я не мог дублировать. Я просто использовал простую команду - "echo 'off'" и "echo 'on'" - все остальное в функции одинаковое; и она работала так , что - то должно висеть в команде , которую вы пытаетесь запустить.
  • 0
    Установите для флага daemon подпроцесса значение True чтобы позволить основному процессу завершиться, даже если он все еще работает.
Показать ещё 7 комментариев
Теги:
python-3.x
subprocess

2 ответа

0

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

from subprocess import STDOUT, check_output

def call_cmd(cmd):
    try:
        check_output(cmd, stderr=STDOUT, timeout=1, shell = True)
    except subprocess.CalledProcessError:
        print("Exit status 1")

def usb_power_toggle(s):
    power_off, power_on = "echo '1-1' |sudo tee /sys/bus/usb/drivers/usb/unbind", \
    "echo '1-1' |sudo tee /sys/bus/usb/drivers/usb/bind"
    if s == "off":
        call_cmd(power_off)
        print("USB power off")
    elif s == "on":
        call_cmd(power_on)
        print("USB power on")
    else:
        raise ValueError
0

просто используйте попен

    def usb_power_toggle(s):
       from os import popen
       power_off, power_on = "echo '1-1' |sudo tee sys/bus/usb/drivers/usb/unbind", "echo '1-1' |sudo tee /sys/bus/usb/drivers/usb/bind"
       if s == "off":
           popen(power_off)
           print("USB power off!")
       elif s == "on":
           popen(power_on)
           print("USB power on!")
       else:
           raise ValueErro
  • 0
    К сожалению, это не сработало. Процесс завершается, но USB не включается / выключается; Ничего не произошло.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню