[英]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.