如何为python安装子进程模块?

时间:2014-10-01 14:56:49

标签: python python-2.7 subprocess

pip无法在pypi网站上找到这个模块。 你能告诉我秘密,如何安装它?

我需要模块通过subprocess.call生成新的shell进程。我看过很多例子,人们使用import subprocess,但没有人知道它是如何安装的。

错误,我得到了(以防万一我已经失去理智并且不明白发生了什么):

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

2 个答案:

答案 0 :(得分:7)

无需在Python 2.7中安装此模块。它是内置的标准模块。

documentation表明它已添加到Python 2.4版的库中。它已经和我们在一起很长时间了。


您在问题更新中显示的错误并不比找不到文件错误更平淡。可能无法找到您尝试调用Popen的可执行文件。

该回溯表示已安装subprocess并已导入。问题只是对subprocess.call('py.test')的调用失败了。


为了将来参考,这是您尝试导入尚未安装的模块时遇到的回溯类型:

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

答案 1 :(得分:2)

错误文本具有误导性。大多数subprocess-commands都希望shellcmd作为字符串列表提交。

在这些情况下,我强烈建议使用shlex模块:

import shlex

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

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

或在这个简单的情况下:

subprocess.call(["py.test"])