我刚刚开始在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 :(得分:0)
只使用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
答案 1 :(得分: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