Stuart Peterson
Stuart Peterson

Reputation: 113

Python subprocess.run C Program not working

I am trying to write the codes to run a C executable using Python.

The C program can be run in the terminal just by calling ./myprogram and it will prompt a selection menu, as shown below:

1. Login
2. Register

Now, using Python and subprocess, I write the following codes:

import subprocess
subprocess.run(["./myprogram"])

The Python program runs but it shows nothing (No errors too!). Any ideas why it is happening?

When I tried:

import subprocess
subprocess.run(["ls"])

All the files in that particular directory are showing. So I assume this is right.

Upvotes: 0

Views: 3020

Answers (2)

tzot
tzot

Reputation: 95991

You have to open the subprocess like this:

import subprocess
cmd = subprocess.Popen(['./myprogram'], stdin=subprocess.PIPE)

This means that cmd will have a .stdin you can write to; print by default sends output to your Python script's stdout, which has no connection with the subprocess' stdin. So do that:

cmd.stdin.write('1\n')  # tell myprogram to select 1

and then quite probably you should:

cmd.stdin.flush()  # don't let your input stay in in-memory-buffers

or

cmd.stdin.close()  # if you're done with writing to the subprocess.

PS If your Python script is a long-running process on a *nix system and you notice your subprocess has ended but is still displayed as a Z (zombie) process, please check that answer.

Upvotes: 1

JCWasmx86
JCWasmx86

Reputation: 3583

Maybe flush stdout?

print("", flush=True,end="")

Upvotes: 0

Related Questions