AIX系统下Python无法在CIFS挂载磁盘创建文件求助
Python OSError: Errno 22 Invalid Argument When Creating File on CIFS Mount in AIX
我尝试用以下Python代码在AIX系统的CIFS挂载磁盘上创建文件时,遇到了OSError: [Errno 22] Invalid argument错误。相同代码在本地路径可以正常运行,而且通过Bash命令也能在该挂载路径下创建文件,麻烦帮忙排查解决:
#!/usr/bin/python import os import sys f=open("/inform/app/Informatica/10.1.0/server/infa_shared/TgtFiles/bank_statements/statement/guru99.txt","w+")
环境详情
挂载信息
磁盘clsfs038:/Bank_statements挂载至/inform/app/Informatica/10.1.0/server/infa_shared/TgtFiles/bank_statements,挂载类型为cifs。
磁盘使用情况(df命令输出)
[inform@xxx/inform ] $ df Filesystem 512-blocks Free %Used Iused %Iused Mounted on /dev/hd10opt 1966080 380432 81% 15329 24% /opt /dev/livedump 65536 64864 2% 4 1% /var/adm/ras/livedump /dev/informlv 1257766912 662083576 48% 425081 1% /inform clsfs038:/Bank_statements 2576863224 393165352 85% 0 0% /inform/app/Informatica/10.1.0/server/infa_shared/TgtFiles/bank_statements
目录权限(ls -la命令输出)
[inform@xxx /inform/app/Informatica/10.1.0/server/infa_shared/TgtFiles/bank_statements ] $ ls -la total 184 drwxrwxr-x 1 inform inform 16384 Dec 19 16:44 . drwxr-xr-x 19 inform inform 32768 Dec 18 17:16 .. drwxrwxr-x 1 inform inform 16384 Dec 19 14:08 load drwxrwxr-x 1 inform inform 16384 Dec 19 10:37 statement -rwxrwxr-x 1 inform inform 0 Nov 22 12:26 testfile -rwxrwxr-x 1 inform inform 0 Dec 18 13:06 testfile2
挂载参数(mount命令输出片段)
clsfs038 /Bank_statements /inform/app/Informatica/10.1.0/server/infa_shared/TgtFiles/bank_statements cifs Nov 22 12:27 rw,uid=482,gid=482,fmode=775,wrkgrp=RCCF
权限检测结果
自定义检测脚本显示目标目录/inform/app/Informatica/10.1.0/server/infa_shared/TgtFiles/bank_statements/statement具备读写权限,但未创建的目标文件权限检测返回False。
可能的解决方案
1. 调整CIFS挂载参数
AIX的CIFS客户端和Python文件操作在Unix属性映射上可能存在兼容性问题,尝试添加nounix参数重新挂载,禁用Unix风格的权限和属性转换:
umount /inform/app/Informatica/10.1.0/server/infa_shared/TgtFiles/bank_statements mount -v -t cifs //clsfs038/Bank_statements /inform/app/Informatica/10.1.0/server/infa_shared/TgtFiles/bank_statements -o rw,uid=482,gid=482,fmode=775,wrkgrp=RCCF,nounix
2. 使用底层os.open替代内置open
Python内置open函数的封装逻辑在网络文件系统上可能有冲突,试试用更底层的os.open创建文件:
#!/usr/bin/python import os file_path = "/inform/app/Informatica/10.1.0/server/infa_shared/TgtFiles/bank_statements/statement/guru99.txt" # 手动指定创建/写入标志和文件权限 fd = os.open(file_path, os.O_WRONLY | os.O_CREAT | os.O_TRUNC, 0o775) with os.fdopen(fd, 'w+') as f: # 执行文件操作 pass
3. 先通过Shell创建文件再读写
既然Bash能正常创建文件,可先通过subprocess调用touch创建空文件,再用Python打开:
#!/usr/bin/python import subprocess file_path = "/inform/app/Informatica/10.1.0/server/infa_shared/TgtFiles/bank_statements/statement/guru99.txt" subprocess.run(['touch', file_path], check=True) with open(file_path, 'w+') as f: # 执行文件操作 pass
4. 排查版本兼容性问题
如果使用的是较老的Python 2.x版本,尝试切换到Python 3.x测试;同时检查AIX的CIFS客户端是否有可用的补丁更新,部分旧版本客户端存在文件系统交互bug。
内容的提问来源于stack exchange,提问作者chiz
相关产品推荐
相关产品推荐

