subprocess.run 和 subprocess.check_output 有什么区别?

What is the difference between subprocess.run & subprocess.check_output?

我正在尝试使用 subprocess.run 发送两个简单的命令并尝试将结果存储在一个变量中然后打印它但是对于一个 arg 输出是 subprocess.run 和其他它的空

参数是“帮助” & “adb devices”

我发送的命令 returns 输出

result = subprocess.run("help", capture_output=True, text=True, universal_newlines=True)
print(result.stdout)

但是这个带有不同 arg 的命令没有返回

result = subprocess.run("adb devices", capture_output=True, text=True, universal_newlines=True)
print(result.stdout)

如果我用 subprocess.checkoutput 尝试相同的命令它 returns 输出谁能解释这里到底发生了什么 这些命令是否有任何特定的使用场景,例如何时使用哪个?

c = subprocess.check_output(
        "adb devices", shell=True, stderr=subprocess.STDOUT)

print(c)
output - b'List of devices attached\r\n\r\n'

这是因为从此处的 python 文档: run method

运行 方法接受第一个参数作为参数而不是字符串。

因此您可以尝试将参数传递到列表中:

result = subprocess.run(['abd', 'devices'], capture_output=True, text=True, universal_newlines=True)

此外, check_output 方法接受 args 但它有一个参数调用 "shell = True" 因此,它适用于 multi-word args.

如果要在没有列表的情况下使用运行方法,请在运行方法参数中添加shell=True。 (我尝试了“man ls”命令并且成功了)。