【问题标题】:Python mkdir() 'No Such FIle or Directory' w/ NodeJSPython mkdir() '没有这样的文件或目录' w/ NodeJS
【发布时间】:2021-05-27 06:47:47
【问题描述】:

我有以下非常简单的 Python 程序。当我自己运行它时,它会完全按照预期创建一个新目录:

import os
os.mkdir("//myuncpath.com/folder1/newFolderName")     //makes new folder in remote file store location

所以,我编写了一个 NodeJS 应用程序,它简单地调用了这个 Python 脚本:

const {PythonShell} = require("python-shell");

let options = {
    scriptPath: '/path/to/PyFile',
};

PythonShell.run('PythonFile.py', options, function (err, results) {     //calls .py file to mkdir
    if err: console.log(err);
})

但是,当我通过 Node 调用脚本时,Python 脚本会抛出 FIleNotFound 错误:

{ Error: FileNotFoundError: [Errno 2] No such file or directory: '//myuncpath.com/folder1/newFolderName'
    at PythonShell.parseError
    ----- Python Traceback -----
    File "/location/to/PyFile.py", line 10, in <module>
        os.mkdir(sys.argv[1])
  traceback: 'Traceback (most recent call last):\n  File "/location/to/PyFile.py", 
        line 10, in <module>\n    os.mkdir(my_dir)\nFileNotFoundError: [Errno 2] No such file or directory: \'//myuncpath.com/folder1/newFolderName\'\n',
  executable: 'python3',
  options: null,
  script: '/location/to/PyFile.py',
  exitCode: 1 }

这里似乎发生了什么?我很难从 Python 解码回溯,因为对我来说一切看起来都有些正常(除了路径周围可能有一些奇怪的 \n 是一个 \' 吗?)

另外,如果我只用print("Hello") 替换 Python 中的 os.mkdir,那效果很好,所以脚本被正确调用,它只是不喜欢 os.mdkir

如果有任何帮助,我将不胜感激,我已经坚持了好几个星期了。

【问题讨论】:

  • 它们都在同一个操作系统上吗?
  • 是否有可能在您的第一次尝试中folder1 存在但后来不存在?

标签: javascript python node.js mkdir python-os


【解决方案1】:

查看您在其中运行代码的用户身份。当您运行 Python 脚本时,可能您是以有权访问目标路径的用户身份运行它。但是当您通过 Node 调用它时,NodeJS 应用程序运行在什么用户上下文中?如果该用户无权访问目标路径,Python 脚本将无法找到目标目录以在其中创建新目录。尝试:

  • 在与运行 Python 脚本相同的用户上下文中运行 NodeJS
  • 授予 NodeJS 用户帐户访问目标路径的权限。

【讨论】:

  • 既然你这么说,这似乎很有道理。有什么方法可以将有权访问 UNC 路径的凭据添加到 Python 文件中?即使它们是硬编码的?
  • 这取决于操作系统。如果 Python 脚本在 Windows 上运行,您可以使用 win32security 函数 LogonUser 和 ImpersonateLoggedOnUser 来设置特定的用户上下文。在类 Unix 系统上, os.setuid 可以完成这项工作 - 但在 Linux 上不允许使用 setuid 脚本,因此您必须将它们“包装”在编译程序中,例如此处考虑的:svn.python.org/projects/python/trunk/Misc/setuid-prog.c 最后可能更简单找出 NodeJS 正在运行它的用户上下文,并授予目标目录中的读/写权限。
猜你喜欢
  • 1970-01-01
  • 2022-11-10
  • 2022-01-16
  • 1970-01-01
  • 2018-08-26
  • 1970-01-01
  • 2020-04-21
  • 1970-01-01
  • 2019-01-08
相关资源
最近更新 更多