带有子流程模块的流程永远不会停止运行

时间:2019-03-16 17:28:13

标签: python python-3.x subprocess

我刚刚开始在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 :(得分: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