ImportError:没有以子进程

时间:2016-10-26 07:55:01

标签: python python-2.7 subprocess python-import

我的应用程序是用这种结构组织的:

main/
    config/
        __init__.py
        # some source .py files
    date/
        __init__.py
        # some source .py files

    # some other sources/packages
    main.py
    __init__.py

bin/
    app

**以上名称仅为示例。

app文件也是if __name__ == "__main__":内部调用main.py文件主要功能的Python文件。

此应用程序运行良好,它可以在任何地方运行,运行app文件。我们也已经在PyPI上上传了包,没有问题。

现在我试图编写一些调用主应用程序的回归测试(另一个Python源代码)。这些测试基本上是:

使用subprocess模块及其功能check_output,我正在运行app文件,因此我运行类似

的内容
subprocess.check_output('..\bin\app')

当我运行回归测试时出现问题,然后出现ImportError: No module named错误。我尝试了一些不同的东西,但我无法进行回归测试。

找不到的模块是我的应用程序中的模块,例如config目录中的模块。我尝试过重构一些事情,但总是遇到同样错误的事情。但是,由于我的应用程序在我正常运行时运行良好,我认为错误是另一个错误的东西......

有人有想法吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

您尚未粘贴完整的错误消息。不能阻止您导入subprocess的任何事情。也许你拼错了它:

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

您的subprocess.check_output代码存在另一个问题。假设您的代码或文件夹结构中没有任何其他错误影响导入,请更改

subprocess.check_output('..\bin\app')

subprocess.check_output('..\\bin\\app')

在Python和许多其他语言中,\escape character。正如\n是换行符的转义序列一样,\a也会发出哔哔声&#39;并且\b是&#39;退格&#39;。

要看到这一点:

>>> print 'hello\bworld'  # notice the missing letter in the output
hellworld
>>> print '\a'  # you'd hear a beep

>>>

因此,您的字符串'..\bin\app'会被解释为'..<backspace>in<bell>pp'

>>> print '..\bin\app'
.inpp

你会听到一声哔哔声。因此,您不太可能拥有具有该名称的文件,并且名称中会发出蜂鸣声*。

为了防止反斜杠(\)表现得像转义字符,你必须使用反斜杠转义它:'\\'

>>> print '..\\bin\\app'
..\bin\app

*(理论上允许某些文件系统)