Python 3.x 无法使用python在Linux服务器中创建文本文件

Python 3.x 无法使用python在Linux服务器中创建文本文件,python-3.x,linux,Python 3.x,Linux,我想在我的Linux服务器上使用Python创建一个简单的文本文件,但我不能这样做 我在服务器中创建了一个目录,路径为: 'var/createcode/code' 在“code”目录中,我正在存储我的python脚本。 这就是我迄今为止所尝试的: code.py: import pathlib with open('data.txt', 'w') as text_file: text_file.write("This is a file") 通常,应在“createcode”目录

我想在我的Linux服务器上使用Python创建一个简单的文本文件,但我不能这样做

我在服务器中创建了一个目录,路径为:

'var/createcode/code'
在“code”目录中,我正在存储我的python脚本。

这就是我迄今为止所尝试的:

code.py:

import pathlib

with open('data.txt', 'w') as text_file:
    text_file.write("This is a file")
通常,应在“createcode”目录中生成名为data.txt的文件。但是,我收到了以下错误:

[Errno 13] Permission denied: 'data.txt'

我该怎么办?我哪里出错了?

这是用户权限问题。运行此python脚本的用户没有写入目录的权限。尝试使用chmodchown命令写入其他目录或更改目录权限

sudo chmod 666 /var/createcode

sudo chown %YOURUSERNAME% /var/www/createcode
注意,第一个命令将允许任何用户写入/var/www/createcode


希望有帮助。

这是用户权限问题。运行此python脚本的用户没有写入目录的权限。尝试使用chmodchown命令写入其他目录或更改目录权限

sudo chmod 666 /var/createcode

sudo chown %YOURUSERNAME% /var/www/createcode
注意,第一个命令将允许任何用户写入/var/www/createcode


希望这会有所帮助。

正如错误消息所述,您(您的脚本运行的用户)没有权限在当前工作目录中创建文件

现在,在您开始检查目录权限之前,您必须了解,按照当前的编写方式,您的脚本不会在“var/createcode”中创建文件,但是在目前的情况下,如果您从/home/someuser启动脚本,它将尝试在/home/someuser中创建文件

为了确保您的文件是在您期望的位置创建的,您必须指定一个绝对路径-任何相对路径都将是“相对于当前工作目录”。这意味着您必须硬编码绝对路径(不太实用),从某个环境变量派生它,或者(在您的情况下)使用
\uuuu文件\uuuu
魔术变量从脚本目录派生它:

import os

# the directory were the script is (ie /var/createcode/code)
here = os.path.abspath(os.path.dirname(__file__))

# you say you want you file to be created in /var/createcode, so
# you want the parent directory
parent = os.path.dirname(_here)

# now we can build the path
filepath = os.path.join(parent, "data.txt")

print("trying to create {}".format(filepath))

with open(filepath, "w") as f:
   f.write("hello world")

此时,如果仍然存在权限问题,则必须检查进程运行时所使用的用户的权限-至少您知道您正在检查正确目录的权限;-)

如错误消息所述,无论当前工作目录是什么,您(您的脚本运行的用户)都无权在其中创建文件

现在,在您开始检查目录权限之前,您必须了解,按照当前的编写方式,您的脚本不会在“var/createcode”中创建文件,但是在目前的情况下,如果您从/home/someuser启动脚本,它将尝试在/home/someuser中创建文件

为了确保您的文件是在您期望的位置创建的,您必须指定一个绝对路径-任何相对路径都将是“相对于当前工作目录”。这意味着您必须硬编码绝对路径(不太实用),从某个环境变量派生它,或者(在您的情况下)使用
\uuuu文件\uuuu
魔术变量从脚本目录派生它:

import os

# the directory were the script is (ie /var/createcode/code)
here = os.path.abspath(os.path.dirname(__file__))

# you say you want you file to be created in /var/createcode, so
# you want the parent directory
parent = os.path.dirname(_here)

# now we can build the path
filepath = os.path.join(parent, "data.txt")

print("trying to create {}".format(filepath))

with open(filepath, "w") as f:
   f.write("hello world")

此时,如果仍然存在权限问题,则必须检查进程运行时所使用的用户的权限-至少您知道您正在检查正确目录的权限;-)

事实上,我已经做到了。我使用了:chown:www-data-createcode/和chmod-R 775 createcode-yep,您将www-data-group设置为目录的所有者,并递归地为所有者和组授予write、read、exec权限,为系统中的任何人授予read exec权限,用于目录和该目录中的所有文件。但它仍然不起作用。我收到了同样的错误,实际上我已经做了。我使用了:chown:www-data-createcode/和chmod-R 775 createcode-yep,您将www-data-group设置为目录的所有者,并递归地为所有者和组授予write、read、exec权限,为系统中的任何人授予read exec权限,用于目录和该目录中的所有文件。但它仍然不起作用。我收到了相同的错误。无论我在哪个目录下,此操作都有效吗?如果我更改为“主页/用户/代码”或其他内容,该怎么办?它还能工作吗?@danny_boy
\uuu文件\uuuuuu
magic var包含您的模块/脚本路径,因此使用此解决方案(非常标准)可以保证
文件路径将相对于模块或脚本所在的位置构建-这实际上就是此代码片段的全部要点。您的脚本是否能够在此路径上创建文件是另一个问题,答案取决于权限、文件系统是否完全可写(某些装入点可以是只读的)等等……无论我在哪个目录下,这都可以工作吗?如果我更改为“主页/用户/代码”或其他内容,该怎么办?它还能工作吗?@danny_boy
\uuu文件\uuuuuu
magic var包含您的模块/脚本路径,因此使用此解决方案(非常标准)可以保证
文件路径将相对于模块或脚本所在的位置构建-这实际上就是此代码片段的全部要点。脚本是否能够在此路径上创建文件是另一个问题,答案取决于权限、文件系统是否可写(某些装入点可以是只读的)等等。。。