当我在正在创建像这样的文件夹的服务器上运行Python应用程序时
if not os.path.exists(destinationPath):
os.makedirs(destinationPath, 777)
我有一个客户端应用程序(也在Python中)使用Paramiko module通过SFTP将文件上传到服务器。如果需要,客户端也会在服务器上创建文件夹
makeCommand = 'mkdir -p "' + remotePath + '"'
ssh.exec_command(makeCommand)
这很好用。我遇到的问题是,如果服务器应用程序创建一个文件夹,客户端就无法访问该文件夹(无法上传到该文件夹或创建子文件夹)。我收到以下错误
line 104, in upload
ftMan.sftp.put(localFile, remoteFile)
File "build/bdist.macosx-10.8-intel/egg/paramiko/sftp_client.py", line 565, in put
File "build/bdist.macosx-10.8-intel/egg/paramiko/sftp_client.py", line 245, in open
File "build/bdist.macosx-10.8-intel/egg/paramiko/sftp_client.py", line 635, in _request
File "build/bdist.macosx-10.8-intel/egg/paramiko/sftp_client.py", line 682, in _read_response
File "build/bdist.macosx-10.8-intel/egg/paramiko/sftp_client.py", line 710, in _convert_status
IOError: [Errno 13] Permission denied
如何让每个应用创建另一个可以使用的文件夹?我已尝试设置权限(正如您在上面的服务器的第一段代码中看到的那样),但这似乎不起作用?
答案 0 :(得分:1)
os.makedirs
的文档说:
默认模式为0777(八进制)。
你正在传递777,这是一个完全不同的数字,因为缺少前导0表示八进制。您可能根本不应该通过该模式,并让它使用默认值。
答案 1 :(得分:1)
我发现了一个类似的问题here,结果发现os.makedirs()
中的模式参数在某些系统上被忽略了。您需要使用os.chmod
来解决此问题。
对于我正在创建的文件夹
for dirpath, dirnames, filenames in os.walk(theDirectory):
os.chmod(dirpath, 0777)
偶尔更改已创建文件夹中的所有权限。这解决了问题,客户端应用程序可以与服务器应用程序创建的文件夹进行交互。
答案 2 :(得分:1)