在python脚本中运行bash source命令

2024-10-02 02:25:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用python运行一个包含bashsource命令的bash脚本。出于某种原因,source命令不起作用

Bash脚本代码:

#!/bin/bash
SETTINGSFILE=/apps/settings

if test -f "$SETTINGSFILE"; then
  source $SETTINGSFILE  #This is not working
  echo "settings file exists" #reaches here
else
  echo "settings file not found"
fi
...

Python代码:

import subprocess

rc = subprocess.call(["./<name-of-bash-script>.sh"])

基本上,我希望使用脚本运行命令source /apps/settings。控件到达echo语句(用注释标记),但bash脚本仍然没有执行source命令。如何让它工作


Tags: apps代码命令echo脚本bashsourcebin
1条回答
网友
1楼 · 发布于 2024-10-02 02:25:56

我不知道为什么在终端中运行“source file.sh”不会加载您的环境变量(我现在不在linux系统上,不能真正测试这个)。然而,一般来说,如果您想要操纵您的环境,您应该直接在python中这样做,而不是调用子进程。比如说,

import os
os.environ['THING'] = 'WORD'

我认为,如果您希望更改子进程中的环境变量,则需要将该子进程嵌入当前父进程中(以便您成为新环境中的子进程),并且需要保持该子进程处于打开状态(您不希望它终止)。您可能需要在源文件末尾添加“/bin/bash-i”之类的内容(以保持子进程运行)。然后,您需要使用类似于pexpect模块的东西将子流程嵌入到当前流程中

import pexpect
child = pexpect.spawn('file.sh')
child.interact()
#check your os.environ to see if it is updated from your source file. 

对不起,我帮不上什么忙了

相关问题 更多 >

    热门问题