python os.environ变量未传递到bash脚本中

0 投票
1 回答
2197 浏览
提问于 2025-04-18 07:48

我有一个Python脚本(使用伪终端)来传递一个叫做“CDP”的环境变量:

def download(self, dPluzz, donnees=None):        # to call the bash script
    self.child_pid = self.v.fork_command(None, ['/bin/bash', 'dPluzz-cli', '-f', dest, '-u', adresse])   
    os.environ["CDP"] = "False"                  # set cancel as "False"
def cancel(self, dPluzz, donnees=None):
    if self.annul == 0:
      if self.time > 10 and self.percent != 100:
         os.environ["CDP"] = "True"
         print os.environ["CDP"]                 # returns True
         self.child_pid = str(self.child_pid)
         cmd = 'kill -TERM' + " " + self.child_pid
         subprocess.Popen(cmd, shell=True)
def __init__(self):                              #Pseudo-Terminal in GTK window     
      self.v = vte.Terminal()                    #(displayed in a notebook)
      self.v.connect ("child-exited", lambda term: self.verif(self, a))
      self.v.connect('contents-changed', self.term)
      self.v.set_size(70,20)
      self.v.set_encoding("UTF-8")  
      self.v.set_cursor_blinks(False) 
      self.v.show()
      self.page.add(self.v)

这个bash脚本是:

kill_jobs()
{
    pkill -TERM -P "$BASHPID"
    echo -e "$CDP"                                # returns False, should be True
    if [ "$CDP" == "True" ]; then
    echo -e "OPERATIONS ANNULEES"
    elif [ "$CDP" == "False" ]; then
    echo -e "OPERATIONS TERMINEES"
    fi
}

问题是,$CDP = False,所以显示的消息不太好。这个原因是什么呢?谢谢。

1 个回答

0

在通过以下方式设置环境后:

os.environ["CDP"] = "True"

你只有在通过 os.system(), os.popen() 或者 os.fork()os.execv() 调用 bash 脚本时,才能在 bash 中获取这个值。

所以如果你能添加:

os.system('/bin/bash script.sh')

你就可以在 bash 脚本中正常使用 CDP 的值了。

请查看 os.putenv() 的相关内容。

我猜 os.environos.putenv() 是紧密相关的。

撰写回答