AceVenturos
AceVenturos

Reputation: 39

How to fix/get awk command called by subprocess working in script (works in python shell)?

I'm trying to get the following command to be called from a python script and to get the output of the command: awk -F':' '$1 == "VideoEdge" {print $2, $3, $8}' /etc/shadow

I've got the function working using subprocess.check_output and .Popen in a python shell but when called from a script it doesn't work and causes an exception of which has no apparent output or message.

How can I get this command working from a script?

I've tried using check_output, Popen and shlex to help with possible issues I thought were causing the issue. Code works fine in a shell.

temp = "User"
cmd = "awk -F':' '$1 == \"" + temp + "\" {print $2, $3, $8}' /etc/shadow"
cmdOutput = subprocess.check_output(shlex.split(cmd))
print cmdOutput

temp = "User"
cmd = "awk -F':' '$1 == \"" + temp + "\" {print $2, $3, $8}' /etc/shadow"
cmdOutput = subprocess.Popen(cmd, stdin=PIPE, stdout=PIPE, stderr=PIPE)
print cmdOutput.communicate()[0]

Upvotes: 0

Views: 212

Answers (3)

AceVenturos
AceVenturos

Reputation: 39

I had a permission issue with the file i was performing the command. bangs head against desk

Upvotes: 0

Artem Trunov
Artem Trunov

Reputation: 1415

Make the same shlex.split(cmd) and it will work:

cmdOutput = subprocess.Popen(shlex.split(cmd), stdin=PIPE, stdout=PIPE, stderr=PIPE)

Upvotes: 1

han solo
han solo

Reputation: 6600

I'd just do. [Just for user consideration, (it will be cryptic, in the comments)]

user = "someuser"
with open('/etc/shadow') as f:
    for line in f:
        if line.startswith(user):
            data = line.split(':')
            break
print(data)

Upvotes: 1

Related Questions