我在apache服务器上运行从php调用的python脚本。如果我想从相同/不同的文件夹导入python文件,该怎么做?我的apache服务器在一个目录中运行,但python代码在不同的目录中。那么我怎样才能将这两个dir结构联系起来呢?
我经常使用要导入的文件中包含值的变量(比如file2.py)。
+ apacheFolder
| folder1
| +folder2
|- index.html
|+ pythonFileDir
|-__init__.py
|-file1.py
|-file2.py
|-file3.py
我尝试在file1.py
,
import file2
但这对我没有帮助。 我从php文件调用file1.py为
shell_exec("[pythonInstallDir]/python.exe [pythonFileDir]/file1.py arg1 arg2");
这个php又由html表单动作触发器调用。
答案 0 :(得分:1)
首先尝试在__init__.py
中添加pythonFileDir
,然后重试。根据您最初调用file1.py
的位置,可能会更改file2.py
的调用方式。您可能需要使用file2.py
from pythonFileDir import file2
调用file1.py
但找不到file2.py
的原因是file1.py
被调用的原因。
shell_exec("[pythonInstallDir]/python.exe [pythonFileDir]/file1.py arg1 arg2");
file1.py
将尝试从执行file2.py
的同一目录中找到shell_exec
(很可能是PHP路径或调用它的Web目录),因此{{1}正在一个完全不同的目录中搜索(远离file2.py
)。
您可以尝试使用pythonFileDir
调用来更改目录:
shell_exec
这样你实际上会在shell_exec("cd [pythonFileDir]; [pythonInstallDir]/python.exe file1.py arg1 arg2");
内执行,找不到pythonFileDir
所以一个完整的例子是:
shell_exec(“cd c:\ path \ to \ pythonFileDir; [pythonInstallDir] /python.exe file1.py arg1 arg2”);
或者您可以尝试这样做以强制PHP更改目录,而不是在file2.py
命令中完成所有操作:
shell_exec()
答案 1 :(得分:0)
正如@sth所说,Max Worg已经提到了。我不确定你是如何从php调用file1.py但你可以尝试将python目录添加到你的python路径?
在file1.py
中import sys
# either absolute or relative path to pythonFolderDir in file1.py
sys.path.append('/home/user/apacheFolder/folder2/pythonFolderDir');
import file2.py
我认为这不是一个好主意,但这是关联目录的一种方式。
答案 2 :(得分:0)
您可以通过在Python中实现套接字来构建Web服务器。你有一个类产生一个作为监听器的线程,一个线程包含其他python对象。从那里,您可以在检测到可以在类中指定的目录中的文件中的更改时重新导入对象线程。你只需在其中放置一个使用os.listdir的while循环,你可以散列文件,或者看看它们是否只是增加,这取决于你。现在,您可以通过网络进行通信,并为您重新加载模块。