【发布时间】:2020-08-25 21:19:36
【问题描述】:
当我运行以下代码时
import os
import subprocess
bash_path = os.path.expanduser('~/.bash_profile')
subprocess.call(['.', bash_path])
我收到以下错误:
Traceback (most recent call last):
File "/path/to/my/script/my_script.py", line 4, in my_func
subprocess.call(['.', bash_path])
File "/Users/user/miniconda3/envs/live_auction/lib/python3.7/subprocess.py", line 323, in call
with Popen(*popenargs, **kwargs) as p:
File "/Users/jisom/miniconda3/envs/live_auction/lib/python3.7/subprocess.py", line 775, in __init__
restore_signals, start_new_session)
File "/Users/jisom/miniconda3/envs/live_auction/lib/python3.7/subprocess.py", line 1522, in _execute_child
raise child_exception_type(errno_num, err_msg, err_filename)
PermissionError: [Errno 13] Permission denied: '.'
我也尝试了subprocess.call(['source', bash_path]) 的变体,但用source 替换. 得到了相同的结果。从 python 脚本看来,我没有权限调用 source 或 .,但我可以从我的终端调用。
我正在尝试重新加载我的环境变量,因为我的程序在此之前调用了另一个子进程来更新一些配置变量,但是,在我重新source 或重新启动终端之前,它们不可用。
如何在 python 脚本中重新source 我的.bash_profile?
【问题讨论】:
-
.和source是 shell 内置函数;它们不是单独的可执行程序。 -
在 bash cli 上,你是否为你的 python 文件添加了执行权限? sudo chmod +x myscript.py
标签: python bash subprocess chmod