python - CircleCI 上 Ubuntu 映像的文件权限
问题描述
我是使用 CircleCI 的新手。我有一个 Python 脚本,用于调用一些 os 命令,例如
path = "/Users/Name/Dev"
os.makedirs(path)
cmds = ["cd path", "touch hello.txt"]
cmd = "; ".join(cmds)
proc = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE,
stderr=subprocess.STDOUT)
但是,PermissionError: [Errno 13] Permission denied: /Users/Name/Dev
每当我尝试访问目录时都会遇到问题。也不能 cd,不能写等。这是在 CircleCI 上运行时,但在我的个人机器上运行良好。
我可以尝试什么的任何想法?如何解决 VM 上的这些权限问题?
CircleCI 的 config.yml 设置如下所示:
build-and-test:
machine:
resource_class: large
image: ubuntu-****
environment:
CI_VARIABLE: "8.0.1"
working_directory: ~/repo
解决方案
我相信那是因为您试图在 CircleCI 机器中创建一组文件Users/Name/Dev
夹/
。由于安全限制(可能是创建文件夹和写入内容的权限),您不应该这样做。
更好的方法是Dev
使用环境变量在主文件夹中创建一个文件夹,如下所示:
path = os.path.join(os.environ['HOME'], 'Dev')
os.makedirs(path)
cmds = ["cd '" + path + "'", "touch hello.txt"]
cmd = "; ".join(cmds)
proc = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE,
stderr=subprocess.STDOUT)
这样,您将始终为用户获得一个可写文件夹,因为它始终是主文件夹。
推荐阅读
- elasticsearch - Calculate custom score based on function_score with ElasticSearch
- python - Continuous input
- swift - 在 Swift 中测试 write(to: url)
- django - Django causing noReverseMatch even with correct namespacing
- ios - x 和 y 位置因不同的设备而异
- c# - 无法加载文件或程序集'Remotion.Linq,版本 = 2.1.0.0
- wordpress - WooCommerce:将自定义项目添加到手动订单
- mongodb - 为什么 MongoDB 将已删除的文件保留在磁盘上?
- java - 有没有办法模拟本地对象的方法调用
- java - 不使用 Java 通过 TCP/IP 发送带有标头的 XML 命令