Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

I am trying to send two simple commands using subprocess.run & trying to store results in a variable then print it but for one arg the output is coming for subprocess.run & for other its empty

Arg are "help" & "adb devices"

command I am sending which returns the output

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

but this command with a different arg is not returning

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

If I try the same command with subprocess.checkoutput it returns the output can anyone explain what exactly is going on here Is there any specific usage scenario's for these command's like when to use which one ?

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

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

1 Answers

It is because from the python documentation here: run method

run method accepts the first parameter as arguments and not string.

So you can try passing the arguments in a list as:

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

Also, check_output method accepts args but it has a parameter call "shell = True" Therefore, it works for multi-word args.

If you want to use the run method without a list, add shell=True in the run method parameter. (I tried for "man ls" command and it worked).

like image 102
Shivam Papat Avatar answered Feb 16 '26 01:02

Shivam Papat