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 ターミナルで同じスクリプトを実行すると、スクリプトでエラーが発生せず、ファイルの内容が正しく視覚化されます。
スクリプトがファイルを読み取る必要があるディレクトリでCHMOD 777を既に試し、ls -lでファイルにすべての権限があることを確認しました。これは、自分のアカウントと Apache サーバーのアカウントに対して行われます。私はこの Linux コンピューターの管理者です。
元のスクリプトでは、スクリプト自体で fileList が作成されます。また、IDLE でリストを作成し、Apache で実行されている同じスクリプトにコピー アンド ペーストする必要がありました。これがないと、Apache では [] のみが返され、IDLE では上記の正しいリストが返されます。これは同じ問題が原因である可能性がありますが、この場合、エラー メッセージは表示されません。Apache のスクリプトに正しいリストを入れると、エラーが発生しました。
スクリプトが IDLE と直接コマンド ラインで正しく機能し、Apache ではファイルを開く権限がないのはなぜですか? 私のアカウントとサーバーのアカウントで CHMOD 777 を使用しても、