Я только начал использовать модуль подпроцесса на 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
Кто-нибудь понимает в чем проблема? Не могли бы вы сказать мне, как закрыть процесс после того, как он делает то, что должен?
Я наконец заставил это работать после попытки некоторых других вещей. Я должен признать, что я не понимаю, почему это работало, или почему у меня была эта проблема прежде всего. Если кто-то знает это и хочет уточнить, я буду благодарен.
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
просто используйте попен
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
"echo 'off'"
и"echo 'on'"
- все остальное в функции одинаковое; и она работала так , что - то должно висеть в команде , которую вы пытаетесь запустить.daemon
подпроцесса значениеTrue
чтобы позволить основному процессу завершиться, даже если он все еще работает.