如何从 python 脚本获取 bashrc/bashprofile

how to source bashrc/bashprofile from python script

我想知道如何从 python 获取您的 bashrc。我自动将脚本转换为别名等等。这是我在 shell:

中看到的
In [6]: subprocess.call(['sudo', 'source', '/home/cchilders/.bashrc'])
sudo: source: command not found
Out[6]: 1

In [7]: subprocess.call(['sudo', '.', '/home/cchilders/.bashrc'])
sudo: .: command not found

谢谢

sudo source 不起作用,因为 source 是 shell 内置的。我不确定您不能 sudo source 的技术原因,因为 sudo echo 工作正常,但请尝试使用 subprocess.call(['.', '/home/cchilders/.bashrc']) 或任何等价物。

当您使用 subprocess.call 时,您使用的不是 shell - 注释来自: https://docs.python.org/2/library/subprocess.html#subprocess.call

subprocess.call(args, *, stdin=None, stdout=None, stderr=None, shell=False)

subprocess.call 的默认设置是没有环境,因为您不在 shell 中。 Source 是一个 bash 内置函数,因此没有供子进程执行的程序。很可能 bashrc 中的大部分代码在子进程的上下文中调用是没有意义的。

您可能想要做的是提供更详细的信息,说明您试图通过采购 bashrc 文件来完成的工作,该文件可以用更 pythonic 的方式完成。

尝试以下操作:

import os

os.system("source /home/cchilders/.bashrc")

如果您想调用任何工具或运行任何其他脚本:

os.system("source /home/cchilders/.bashrc && python3 script name")

你可以用 subprocess.run 和一个子 shell 来做到这一点。

而不是这个:

subprocess.call(['sudo', 'source', '/home/cchilders/.bashrc'])

试试这个:

subprocess.run("sudo bash -c 'source /home/cchilders/.bashrc'", shell=True)