2011-05-08 17 views
39

Quiero ejecutar un script de Python desde un script de Python con subprocess, y deseo hacerlo utilizando el mismo intérprete para cada uno de ellos.¿Cómo obtener la ruta actual del intérprete de Python desde dentro de una secuencia de comandos de Python?

estoy usando virtualenv, por lo que me gustaría hacer algo como:

subprocess.Popen('%s script.py' % python_bin) 

¿Cómo llego python_bin?

Debe ser /usr/bin/python fuera de un virtualenv, y /path/to/env/bin/python en un virtualenv.

Respuesta

57

El nombre del intérprete se almacena en la variable sys.executable

+9

esto no es confiable para los intérpretes embebidos , use 'os .__ file__' para eso (cortesía de http://stackoverflow.com/a/8187027/14420) –

+1

en realidad es un directorio sobre' os .__ file__' – denfromufa

2

sólo para asegurarse de que:

>>> import sys 
>>> sys.executable 
'/usr/bin/python' 
>>> 
7

lo encontré por:

>>> import sys   
>>> help(sys) 
... 

DATA 
    __stderr__ = <open file '<stderr>', mode 'w' at 0x110029140> 
    __stdin__ = <open file '<stdin>', mode 'r' at 0x110029030> 
    __stdout__ = <open file '<stdout>', mode 'w' at 0x1100290b8> 
    api_version = 1013 
    argv = [''] 
    builtin_module_names = ('__builtin__', '__main__', '_ast', '_codecs', ... 
    byteorder = 'big' 
    copyright = 'Copyright (c) 2001-2009 Python Software Foundati...ematis... 
    dont_write_bytecode = False 
    exc_value = TypeError('arg is a built-in module',) 
    exec_prefix = '/usr/bin/../../opt/freeware' 
    executable = '/usr/bin/python_64' 
Cuestiones relacionadas