Процесс с подпроцессным модулем никогда не останавливается - PullRequest
1 голос
/ 16 марта 2019

Я только начал использовать модуль подпроцесса на 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

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

Ответы [ 2 ]

0 голосов
/ 17 марта 2019

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

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 голосов
/ 16 марта 2019

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

    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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...