2014-10-01 16 views
8

pip nie może znaleźć tego modułu, a także mnie na stronie internetowej pypi. Czy możesz mi powiedzieć, sekret, jak go zainstalować?Jak zainstalować moduł podprocesowy dla Pythona?

Potrzebuję moduł do spawnowania nowego procesu powłoki przez subprocess.call. Widziałem wiele przykładów, gdzie ludzie używają import subprocess, ale nikt nie pokazuje, w jaki sposób został zainstalowany.

błąd, że mam (na wszelki wypadek Straciłem umysł i nie rozumie, co się dzieje):

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 
+3

to wbudowane, nie trzeba go zainstalować. jaka jest twoja wersja python? –

+1

Moduł 'subprocess' jest częścią standardowej biblioteki, nie jest potrzebny (nie może być zainstalowany). Otrzymany błąd wskazuje, że nie można znaleźć pliku wykonywalnego *, który ma być uruchamiany jako podproces, a nie samego modułu "podprocesu". Może to być problem z katalogiem roboczym, '$ PATH' lub plik wykonywalny niebędący" .exe ". –

+0

Jaki jest plik 'py.test'? Windows nie wie, w jaki sposób powinien wykonać plik z rozszerzeniem ".test", więc musisz przynajmniej określić interpreter, aby go wykonać. Zobacz [to pytanie] (http://stackoverflow.com/questions/4965175/make-subprocess-find-git-executable-on-windows/10555130) dla przykładu tego problemu z 'git.cmd'. –

Odpowiedz

7

Nie ma potrzeby instalowania tego modułu w Pythonie 2.7. Jest to standardowy moduł, który jest wbudowany.

Numer documentation pokazuje, że został dodany do biblioteki w wersji 2.4 Pythona. Jest z nami od dawna.


Błąd wyświetlany podczas aktualizacji pytania nie jest bardziej prozaiczny niż błąd znaleziony w pliku. Prawdopodobnie nie można znaleźć pliku wykonywalnego, który próbujesz wywołać Popen.

To odwołanie wskazuje, że subprocess jest zainstalowany i zaimportowany. Problem polega na tym, że połączenie z subprocess.call('py.test') kończy się niepowodzeniem.


Na przyszłość, to jest rodzaj traceback można napotkać podczas próby importowania moduł, który nie został zainstalowany:

 
>>> import foo 
Traceback (most recent call last): 
    File "", line 1, in 
ImportError: No module named foo 
+0

Właśnie zaktualizowałem pytanie i dodałem tekst błędu. Być może nie zrozumiałem go poprawnie? – avasin

+0

Tak, masz całkowitą rację. Ciężki dzień ... Przyjmie odpowiedź w 8 minut. – avasin

2

Błąd tekstu jest mylące. Większość poleceń podprocesu oczekuje, że shellcmd zostanie przesłany jako lista łańcuchów.

W tych przypadkach i zalecamy korzystanie z modułu shlex:

import shlex 

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

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

lub w tym prostym przypadku tylko:

subprocess.call(["py.test"]) 
Powiązane problemy