【问题标题】:python os.environ variable do not pass in the bash scriptpython os.environ 变量不传入 bash 脚本
【发布时间】:2014-05-28 10:05:09
【问题描述】:

我有一个 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 所以显示的消息不好。 是什么原因? 谢谢

【问题讨论】:

  • 如果你没有设置CDB怎么设置成字符串“False”?
  • 很难理解你在这里想要达到的目标:(
  • 我明白了。调用脚本 bash 时设置“False”。稍后我将编辑我的问题,我必须去吃饭...无论如何,谢谢!

标签: python bash environment-variables


【解决方案1】:

设置环境后通过

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

只有通过os.system(), os.popen() or os.fork() and os.execv(). 调用 bash 脚本,才能在 bash 中获取此值

所以如果可以添加

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

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

请阅读os.putenv()

我猜 os.environ 和 os.putenv() 是密切相关的。

【讨论】:

  • @Guillaume +1 回答你的问题,它帮助我更深入地理解了 os.*。
  • 我不明白,因为当我尝试取消它时,shell 脚本已经在运行了
  • 请详细说明,猜不出你的意思。我是说,只有当您使用os.system() 或我上面提到的任何方法触发脚本时,您才会在bash 脚本中获得CDP 值,如果shell 脚本正在运行,那么您正在运行python 程序并认为@ 987654328@ 可以读为 True 那么它是不可能的。请立即杀死 python 和 shell 脚本并按照我的建议进行更改,然后寻找预期的结果。
猜你喜欢
  • 2013-06-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-13
  • 2013-10-04
  • 2011-04-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多