0

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 を使用しても、

4

2 に答える 2

1

あなたのfileList変数には、B.txtのパスのPython-modulesの後にスペースがあるようです。

/home/mark/Bureaublad/Dropbox/Stage-documenten/Python-modules /Read_files_determine_overlap_and_visualisation/B.txt

一度外して確認してみてください。

于 2013-10-03T13:32:52.140 に答える
0

ヒントをありがとうございますが、役に立ちませんでした。問題を解決する汚い方法を見つけました。ファイルを /tmp/ フォルダーに配置している間、「許可が拒否されました」というエラーはもうありません。

于 2013-10-03T12:01:05.360 に答える