0

WindowsとLinux(Debian)のフォルダー内にまったく同じディレクトリ構造があります-スクリプトは静的+データ出力フォルダーに沿っています

次のコードが Windows では問題なく動作するのに、Linux では no such file or directory path エラーが発生するのはなぜですか?

@app.route('/_getdataoutputfilelisting')
def getdataoutputfilelisting():
    listoffilesindataouput = getfiles('static/dataoutput')
    return jsonify(listoffiles = listoffilesindataouput) 

def getfiles(dirpath):
    a = [s for s in os.listdir(dirpath)
         if os.path.isfile(os.path.join(dirpath, s))]
    a.sort(key=lambda s: os.path.getmtime(os.path.join(dirpath, s)))
    a.reverse()
    return a

両方のOSで動作するようにユニバーサルにする方法はありますか?

ありがとう

4

3 に答える 3

1

渡す文字列を getfiles に変更してみます。

代わりにこれを試してください:

os.path.join(os.getcwd(),'static','dataoutput')

Windows で動作するかどうかは確認できませんが、Linux では動作します。一方、し'static/dataoutput'ません。

于 2012-11-27T05:00:32.643 に答える
0

Windows と Linux では、パスの区切り記号が異なります。Windows の場合、パスの一部はバックスラッシュ ( ) で区切られますが、\Linux ではスラッシュ ( /) です。os.path.join('static', 'dataoutput')@mcneo が提案したように (なくても)使用getcwd()するか、. を使用して自分でパスを作成できますos.path.sep

getfiles(os.path.join('static', 'dataoutput'))
# or...
getfiles('static' + os.path.sep + 'dataoutput')

技術的には、プラットフォームを確認して正しいスラッシュを入れることもできますが、それはお勧めできません。問題をよりよく示すためにここに追加していますが、使用する必要がありますos.path

if sys.platform == 'win32':
  getfiles('static\\dataoutput')
else:
  getfiles('static/dataoutput')
于 2012-11-27T05:07:52.020 に答える
-1

おそらく、DOS と Unix が改行や戻り値などを異なる方法で処理する方法と関係があります。dos2unixファイルを変換するツールを試してください。

SYNOPSIS
           dos2unix [options] [FILE ...] [-n INFILE OUTFILE ...]
           unix2dos [options] [FILE ...] [-n INFILE OUTFILE ...]
于 2012-11-27T04:56:01.027 に答える