I'm trying to write a Python script that starts a subprocess, and writes to the subprocess stdin. I'd also like to be able to determine an action to be taken if the subprocess crashes.
The process I'm trying to start is a program called nuke
which has its own built-in version of Python which I'd like to be able to submit commands to, and then tell it to quit after the commands execute. So far I've worked out that if I start Python on the command prompt like and then start nuke
as a subprocess then I can type in commands to nuke
, but I'd like to be able to put this all in a script so that the master Python program can start nuke
and then write to its standard input (and thus into its built-in version of Python) and tell it to do snazzy things, so I wrote a script that starts nuke
like this:
subprocess.call(["C:/Program Files/Nuke6.3v5/Nuke6.3", "-t", "E:/NukeTest/test.nk"])
Then nothing happens because nuke
is waiting for user input. How would I now write to standard input?
I'm doing this because I'm running a plugin with nuke
that causes it to crash intermittently when rendering multiple frames. So I'd like this script to be able to start nuke
, tell it to do something and then if it crashes, try again. So if there is a way to catch a crash and still be OK then that'd be great.
You can provide a file-like object to the
stdin
argument ofsubprocess.call()
.The documentation for the
Popen
object applies here.To capture the output, you should instead use
subprocess.check_output()
, which takes similar arguments. From the documentation:It might be better to use
communicate
:"Better", because of this warning:
only works if 'myapp' takes no arguments.