Wanneer jou externe programma een bestand verwacht, dan vind ik persoonlijk een temp bestand toch de meest nette oplossing, maar dan wel met bijvoorbeeld de tempfile module uit de Python standard library.
Wanneer je externe programma tevens overweg kan met invoer vanuit stdin, dan is het inderdaad netter om subprocess.Popen te gebruiken. Geef dan stdin=PIPE mee aan de constructor, en je kunt je data dan wegschrijven naar het stdin attribuut van je Popen object.