web-dev-qa-db-fra.com

Comment installer le module de sous-processus pour python?

pip n'est pas en mesure de trouver ce module, ainsi que moi sur le site pypi. Pourriez-vous s'il vous plaît me dire le secret, comment l'installer?

J'ai besoin du module pour générer un nouveau processus Shell via subprocess.call. J'ai vu beaucoup d'exemples où les gens utilisent import subprocess, mais personne ne montre comment il a été installé.

Erreur, que j'ai (juste au cas où j'aurais perdu la tête et ne comprend pas ce qui se passe):

Microsoft Windows [Version 6.3.9600]
(c) 2013 Microsoft Corporation. All rights reserved.

C:\Users\Alexander\Desktop\tests-runner>python run.py
Traceback (most recent call last):
  File "run.py", line 165, in <module>
    main()
  File "run.py", line 27, in main
    subprocess.call('py.test')
  File "C:\Python27\lib\subprocess.py", line 522, in call
    return Popen(*popenargs, **kwargs).wait()
  File "C:\Python27\lib\subprocess.py", line 710, in __init__
    errread, errwrite)
  File "C:\Python27\lib\subprocess.py", line 958, in _execute_child
    startupinfo)
WindowsError: [Error 2] The system cannot find the file specified
11
avasin

Il n'est pas nécessaire d'installer ce module dans Python 2.7. Il s'agit d'un module standard intégré.

Le documentation montre qu'il a été ajouté à la bibliothèque pour Python version 2.4. Il est avec nous depuis longtemps maintenant.


L'erreur que vous montrez dans la mise à jour de votre question n'est rien de plus prosaïque qu'une erreur de fichier introuvable. Le fichier exécutable sur lequel vous essayez d'appeler Popen est probablement introuvable.

Cette trace indique que subprocess est installé et a été importé. Le problème est simplement que l'appel à subprocess.call('py.test') échoue.


Pour référence future, voici le type de traceback que vous rencontrez lorsque vous tentez d'importer un module qui n'a pas été installé:

 >>> import foo 
 Traceback (dernier appel le plus récent): 
 Fichier "", ligne 1, dans 
 ImportError: Aucun module nommé foo 
8
David Heffernan

Le texte d'erreur est trompeur. La plupart des commandes de sous-processus s'attendent à ce que le shellcmd soit soumis comme une liste de chaînes.

Dans ces cas, je recommande fortement l'utilisation du module shlex:

import shlex

Shell_cmd = "py.test"  # or should it be "test.py" ?

subprocess_cmd = shlex.split(Shell_cmd)
subprocess.call(subprocess_cmd)

ou dans ce cas simple juste:

subprocess.call(["py.test"])
2
Don Question