0

我在 Windows 和 Linux (Debian) 中的文件夹中具有完全相同的目录结构 - 脚本位于静态 + 数据输出文件夹中

为什么下面的代码在 Windows 中运行良好,但在 linux 中没有这样的文件或目录路径错误?

@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

有没有办法让它通用,以便它在两个操作系统中都可以工作?

谢谢

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 回答