子进程模块的进程永远不会停止运行

问题描述 投票:1回答:2

我刚刚开始在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

有谁知道问题是什么?你可以告诉我如何在它完成预期之后关闭这个过程吗?

python python-3.x subprocess
2个回答
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

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
© www.soinside.com 2019 - 2024. All rights reserved.