如何从python脚本中获取bashrc/bashprofile的源代码

如何从python脚本中获取bashrc/bashprofile的源代码,python,bash,scripting,subprocess,.bash-profile,Python,Bash,Scripting,Subprocess,.bash Profile,我想知道如何从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: .: comman

我想知道如何从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源代码
无法工作,因为源代码是内置的shell。我不确定为什么不能
sudo source
,因为
sudo echo
工作正常,但请尝试使用
subprocess.call(['.','/home/cchilders/.bashrc'])
或其他类似的调用。

使用subprocess.call时,您没有使用shell-注意:

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

subprocess.call的默认值是无环境,因为您不在shell中。源代码是bash内置的,所以没有可供子进程执行的程序。而且,bashrc中的大多数代码在子流程上下文中调用可能毫无意义

您可能想做的是提供更多详细信息,说明您试图通过以更具python风格的方式获取bashrc文件来完成的任务。

尝试以下操作:

import os

os.system("source /home/cchilders/.bashrc")
如果要调用任何工具或运行任何其他脚本:

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

source
是bash内置的,所以您必须执行
bash-c“source…”
。但是,这不会产生您想要的效果,因为当bash进程结束时,shell设置将消失。您可能需要在启动python之前执行此操作。如果我调用一个仅从python内部源代码的shell脚本,该怎么办?这不会实现您想要的。。。。无法调用rc并使其在pythonshell或脚本中产生任何效果。。。。你到底想完成什么?也许还有其他方法可以做到这一点…@codyc4321,记住这一点:子进程不能改变其父进程的环境。你到底想用它来实现什么?仅仅在子进程中运行一堆shell命令不会影响Python程序(或任何父进程)的状态。或者
type-a-source
type-a-echo
——这就是为什么“sudo-echo”工作的原因,我想你可以做
subprocess.call(“source/home/user/.bashrc”,shell=True)
。。。但正如OP评论中所提到的,即使他成功地使其发挥作用,这也不会产生预期的效果