Search code examples
pythonsubprocesspopen

Execute terminal command over python


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?


Solution

  • 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.