【发布时间】:2019-08-07 12:48:53
【问题描述】:
我刚刚开始在 Python 3 上使用 subprocess 模块,但我不知道它是如何工作的。 这是我编写的用于打开和关闭 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
有人知道问题出在哪里吗?你能告诉我如何在它完成它应该做的事情后关闭它吗?
【问题讨论】:
-
我无法复制。我只是使用了一个简单的命令 -
"echo 'off'"和"echo 'on'"- 函数中的其他所有内容都相同;并且它起作用了,因此您尝试运行的命令中必须有一些东西挂起。 -
将子进程的
daemon标志设置为True以允许主进程退出,即使它仍在运行。 -
@martineau ??
TypeError: __init__() got an unexpected keyword argument 'daemon' -
您需要显式创建一个
Process实例来设置它。另请注意,__init__()的daemon关键字参数直到 3.3 版才添加,因此您需要在早期版本中创建后自己手动设置该属性。我通常这样做是为了更好地向后兼容。 -
@martineau -
subprocess我想,不是multiprocessing.Process
标签: python python-3.x subprocess