繁体   English   中英

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

[英]What is the difference between subprocess.run & subprocess.check_output?

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

Arg 是“帮助”“adb 设备”

我发送的命令返回输出

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

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

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

如果我使用subprocess.checkoutput尝试相同的命令,它会返回输出任何人都可以解释这里到底发生了什么这些命令是否有任何特定的使用场景,比如何时使用哪个?

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方法接受第一个参数作为参数而不是字符串。

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

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

此外, check_output方法接受 args,但它有一个参数调用“shell = True”因此,它适用于多字 args。

如果要使用不带列表的 run 方法,请在 run 方法参数中添加 shell=True。 (我尝试了“man ls”命令并且它有效)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM