我刚刚开始在Python 3上使用子进程模块,我无法弄清楚它是如何工作的。这是我写的一个功能,用于打开和关闭USB端口。它工作,但然后它无限期地运行,我不能做任何其他事情,直到用Ctrl + C强制它停止。 print语句也永远不会被调用:
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
有谁知道问题是什么?你可以告诉我如何在它完成预期之后关闭这个过程吗?
只是使用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
我尝试了一些不同的东西后终于开始工作了。我必须承认,我不明白为什么会这样,或者为什么我之前遇到这个问题。如果有人知道并愿意澄清我会很感激。
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