2011-08-18 2 views
13

Ho uno script python che utilizza il sottoprocesso:Windows - correndo .py direttamente vs esecuzione pitone blah.py comporta in modo diverso

import subprocess 
print "Running stuff" 
subprocess.check_call(["do_stuff.bat"]) 
print "Stuff run" 

Se questo è stato chiamato blah.py, e corro (dal prompt dei comandi) :

Otterrò l'output da do_stuff.bat (o qualsiasi altra cosa venga eseguita).

Se questo viene eseguito come:

blah.py 

Allora io non capisco uscita dal do_stuff.bat, solo le istruzioni di stampa.

Finora visto su Windows Server 2003. Python versione 2.5.2 (bloccato lì per vari motivi). Guardando il associata all'azione tipo di file che vedo:

Python.File = "C: \ Python25 \ python.exe" "% 1" % *

Così qualcuno può spiegare la differenza?

+1

vorrei azzardare un'ipotesi e dire che python esplicitamente chiamando rende lo standard terminale di fuori, mentre solo chiamando il file tubi standard fuori da qualche altra parte. Non posso confermare questo sospetto. – Exelian

+0

Su un windows 7 64 bit che esegue l'output di Python 2.6.6 da un batch viene stampato su uno schermo dopo aver chiamato blah.py da solo. – Helbreder

+0

Sul mio Windows 7 a 32 bit con Python 2.6.6 non posso riprodurlo. –

risposta

1

Ho avuto problemi comuni utilizzando thread, ma tutto il mio codice era in python. I thread non possono scrivere sullo standard output usando la stampa. Solo il thread principale potrebbe farlo. Ho usato somethnig come questo

import sys 
sys.stdout.write("this was printed by thread") 

So che probabilmente non ti aiuto con file bat ...

+0

Questo è interessante e probabilmente ha un impatto sul modo in cui il sottoprocesso funziona - non risolverà il problema, ma è correlato. –

+2

* I thread non possono scrivere sullo standard output usando print * Perché la pensi così? –