Execute terminal command over python

Question:

I’m trying to get the hostname where the .py is running, so I used:

server = subprocess.Popen(["hostname"])
print(server.stdout)

However, I’m getting this return:

None
HOSTNAME

It always prints a None from the subprocess.Popen() and then the hostname at print(server.stdout). Is there a way to fix this?

Asked By: null92

||

Answers:

I’ve three solutions so far:

  1. Using Popen and stdout.read:
import subprocess
server = subprocess.Popen(["hostname"], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
print(server.stdout.read().decode().rstrip("n"))
  1. Using Popen and communicate
import subprocess
server = subprocess.Popen(["hostname"], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
out, err = server.communicate()
print(out.decode().rstrip("n"))
  1. Using check_output:
import subprocess
print(subprocess.check_output("hostname").decode().rstrip("n"))

I’m wondering if you can get a string directly, but it works.

Answered By: Nineteendo
Categories: questions Tags: , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.