繁体   English   中英

Python:从另一个文件调用的程序未正确运行

[英]Python: program called from another file not running correctly

到目前为止,我已经发现并解决了一些错误,我的实际代码非常干净并且运行良好。 我想我已经缩小了我必须解决的问题...我有一个文件夹“ Stocks”,其中包含python代码,另一个嵌套文件夹“ PullStock”,其中包含更多python代码和文本文件。

文件系统示例:

Folder: Stocks
  python code files (`stockcalc.py`)
  Folder: PullStock
    python code files (`pullList.py`)
    text files

我可以自己运行程序pullList.py ,并且运行良好。 它所做的只是解析文本文件的行并将变量存储到数组中。 下面提供了我单独运行该程序时的输出:

array length in pullList:  2

现在,当我运行stockcalc.py ,我从文件夹“ PullStock”中导入文件pullList.py ,但它不会运行相同的文件。 输出如下:

array length in pullList:  0

我的stockcalc.py标头看起来像这样:

#!/usr/bin/env python
from PullStock import pullList
#import PullStock.pullList

我已经在标题中尝试了以上两种解决方案,但它们似乎都不起作用。 如果我正在调用文件,那么它是否应该与我自己运行时的运行方式相同? 如果无法从以上信息中找到解决方案,那么很抱歉浪费您的时间,我还有很多工作要做。

您至少有多个问题。 从这里开始:

from StockList import pullList

您的目录名为PullStock ,但您尝试使用名称StockList 这显然是行不通的。

但是,即使您解决了该问题,也遇到了更大的问题: StockList不是程序包。 在Python 2(看起来像您在使用)中,目录只有其中包含名为__init__.py的文件才是包。 它可以为空,但必须存在。

在程序包目录中运行脚本几乎总是错误的,因此通过修复该问题,您还破坏了有效的部分。 无论如何,您都可以摆脱它,但是您应该研究一个更好的组织,例如,一个__main__.py文件,该文件使您可以将脚本作为脚本运行,或在顶层使用“启动器”脚本。

我给50/50的赔率是您还有另一个问题:如果pullList.py正在打开'spam.txt''eggs.txt'并只是希望它能工作,那么当您的工作目录不在时,它将无法工作' t脚本的目录; 您需要将scriptdir = os.path.abspath(os.path.dirname(sys.argv[0]))到脚本顶部,然后使用os.path.join(scriptdir, 'spam.txt')

最后,对模块使用全小写名称通常是一个好主意。 特别是如果您希望在Windows和非Windows系统上都运行相同的代码。

如果要使用多个文件组织并创建包和导入模块,则应查看Python Doc中的教程。 https://docs.python.org/2.7/tutorial/modules.html#packages

在那里,您会找到一个很好的解释,说明如何组织程序包以及将文件添加为文件( __init__.py )以使该文件夹被识别为模块等。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM