Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
“如何使用python”;登录shell“;加上;打电话;?_Python_Shell_Call_Subprocess - Fatal编程技术网

“如何使用python”;登录shell“;加上;打电话;?

“如何使用python”;登录shell“;加上;打电话;?,python,shell,call,subprocess,Python,Shell,Call,Subprocess,我尝试使用python在大型计算机集群上调用环境定义的函数 根据我的理解,这些失败是由于登录shell和非登录shell之间的差异(即运行不同的初始化脚本)。 虽然我可以尝试直接使用别名函数(虽然初始尝试不适用于我的特定情况),但我更愿意一般性地加载必要的文件,使“登录shell”成为python调用函数中使用的“登录shell” 我试过这样的方法: call("sh /etc/profile;sh $HOME/.bash_profile; MY COMMAND", shell=True )

我尝试使用python在大型计算机集群上调用环境定义的函数

根据我的理解,这些失败是由于登录shell和非登录shell之间的差异(即运行不同的初始化脚本)。
虽然我可以尝试直接使用别名函数(虽然初始尝试不适用于我的特定情况),但我更愿意一般性地加载必要的文件,使“登录shell”成为python调用函数中使用的“登录shell”

我试过这样的方法:

call("sh /etc/profile;sh $HOME/.bash_profile; MY COMMAND", shell=True )

但这不起作用

配置文件应通过
源文件
命令读取

使用
sh
执行概要文件会导致子shell执行这些文件。设置子shell的环境变量不会影响父shell

call(". /etc/profile;. $HOME/.bash_profile; MY COMMAND", shell=True )

您可以使用命令行强制登录shell

-sh -c "MY COMMAND"

在shell名称前面加上
-
将其作为登录shell调用,而不是普通shell。

它不起作用,因为您正在子进程(
sh
)中运行
/etc/profile
,该子进程在下一个命令启动之前关闭。使用
source
()可以让命令在同一进程中运行
MY command
将运行。