dissidia
dissidia

Reputation: 1581

Calling 2 external applications at the same time

I have a python script in which I am trying to call them out at the same time. I have written it as:

os.system('externalize {0}'.format(result))
os.system('viewer {0} -b {1}'.format(img_list[0], img_list[1]))

However by doing so, the second application will only be open/appear unless I quit/ exit out of the first application.

I tried using subprocess as follows:

subprocess.call('externalize {0}'.format(result), shell=True)
subprocess.call('viewer {0} -b {1}'.format(img_list[0], img_list[1]))

But I am not getting much success. Am I doing it wrong somewhere?

Upvotes: 0

Views: 29

Answers (2)

ivan_pozdeev
ivan_pozdeev

Reputation: 35998

Run them as subprocesses without waiting for finish:

p1=subprocess.Popen(<args1>)
p2=subprocess.Popen(<args2>)

If/when you then need to wait for their finish and/or check their exit code, call wait() (or whatever else applicable) on these objects.

(In general, you should never ignore the object that Popen() returns and its exit code if you need to do something as a result of the subprocess' work (e.g. clean up the files you fed them if they're temporary).)

Upvotes: 1

tdelaney
tdelaney

Reputation: 77337

Several subprocess functions such as call are just convenience wrappers for the Popen object which executes programs asynchronously. You can use it instead

import subprocess as subp

result = 'foo' img_list = ['bar', 'baz']

proc1 = subp.Popen('externalize {0}'.format(result), shell=True)
proc2 = subp.Popen('viewer {0} -b {1}'.format(img_list[0], img_list[1]), shell=True)
proc1.wait()
proc2.wait()

Upvotes: 1

Related Questions