我正在使用Python和PHP编写基于Web的应用程序。现在我在编程的同一台计算机上运行服务器。 Python脚本将在PHP中执行。这部分运作良好。
脚本必须读取文件并在列表中存储路径名。此列表用于脚本的其余部分。
fileList = ['/home/mark/Bureaublad/Dropbox/Stage-documenten/Python-modules /Read_files_determine_overlap_and_visualisation/B.txt', '/home/mark/Bureaublad/Dropbox/Stage-documenten/Python-modules/Read_files_determine_overlap_and_visualisation/D.txt', '/home/mark/Bureaublad/Dropbox/Stage-documenten/Python-modules/Read_files_determine_overlap_and_visualisation/C.txt', '/home/mark/Bureaublad/Dropbox/Stage-documenten/Python-modules/Read_files_determine_overlap_and_visualisation/E.txt', '/home/mark/Bureaublad/Dropbox/Stage-documenten/Python-modules/Read_files_determine_overlap_and_visualisation/A.txt']
函数readFiles将使用此列表。 fileList是一个全局变量。它由glob制作。
def readFiles():
Dic = {}
for filePath in fileList:
geneList = [] #create a new list every new loop to put in genesPerBacteriaDic as value
for line in open(filePath, 'r').readlines(): #innerloop to read every file in lines
if not line.startswith('FIG'):
sys.exit('Wrong file format!!\nUpload FIGFAMS-format only') #terminate program if incorrect file format is imported
FIGnumber = line[0:11] #remove '\n' or another characters on the end of the string
geneList.append(FIGnumber)
head, fileName = os.path.split(filePath) # convert filePath to fileName
Dic[fileName] = geneList
return Dic
当我在调用Python脚本时在Apache上运行时,我在tail -f /var/log/apache2/error.log中收到以下错误:
Traceback (most recent call last):
File "/var/www/Coregrapher/makeVisualisation.py", line 192, in <module>
main()
File "/var/www/Coregrapher/makeVisualisation.py", line 48, in main
genesPerBacteriaDic = readFiles()
File "/var/www/Coregrapher/makeVisualisation.py", line 70, in readFiles
for line in open(filePath, 'r').readlines(): #innerloop to read every file in lines
IOError: [Errno 13] Permission denied: '/home/mark/Bureaublad/Dropbox/Stage-documenten/Python-modules/Readp_files_determine_overlap_and_visualisation/B.txt'
当我在IDLE和Linux Terminal中运行相同的脚本时,脚本不会出现错误并且文件内容的正确可视化。
我已经在脚本必须读取文件的目录中尝试了CHMOD 777,并使用ls -l检查文件是否具有所有权限。这是为我自己的帐户和Apache服务器的帐户完成的。我是这台Linux计算机的管理员。
在orignal脚本中,fileList是在脚本本身中创建的。我还需要在IDLE中创建列表并复制/粘贴到在Apache上运行的相同脚本。如果没有这个,Apache []仅返回,并在IDLE中返回上面显示的正确列表。这可能是由同一问题引起的,但在这种情况下没有错误消息。当我在Apache的脚本中放入正确的列表时,发生了错误。
为什么脚本在IDLE中直接在命令行中正常工作,在Apache上它没有打开文件的权限,即使我的帐户上有CHMOD 777和服务器帐户?
答案 0 :(得分:1)
在我看来,在 fileList 变量中,在B.txt路径中的 Python-modules 之后有一个空格。
/ home / mark / Bureaublad / Dropbox / Stage-documenten / Python-modules /Read_files_determine_overlap_and_visualisation/B.txt
尝试将其删除并检查一次。
答案 1 :(得分:0)
感谢您提示,但没有帮助。我找到了一种解决问题的方法。将文件放在/ tmp /文件夹中时,我不再有“权限被拒绝”错误。