包创建文件不从.bashrc文件中获取值

时间:2013-06-18 12:01:22

标签: python bash wxpython debian subprocess

我是python的新手,对于GUI,我使用wxpython。

我的问题是:

我必须为两种类型的产品(比如产品1和产品2)创建一个debian文件。可以通过运行README.package.creation文件来完成。对于“.bashrc”中的“product1”,我们必须更改

                Product = product1 

之后我们必须在新终端中“make clean”(否则.bashrc中的更改将不会生效,即如果我们不遵循该程序,“product”可能不等于“product 1”),那么我们有运行./Readme.package.creation.process。在Readme.package.creation中,它自动将产品类型作为“产品1” 如果我手动执行此操作它将正常工作,但如果我通过GUI执行此操作,Readme.package.creation文件将不会采用产品类型。从python null值将被发送。 请帮忙解决我的问题。 我的代码是:

      subprocess.call("sed -i '/export PRODUCT/d' .bashrc", shell=True)
      subprocess.call("sed -i '/export BOARD=TYpe/ a\ export PRODUCT=product1' .bashrc", shell=True)
      os.chdir("/home/x/y/z")
      subprocess.call("make clean", shell=True)
      os.chdir("/home/x/main/src/package")
      subprocess.call("sed -i 's/re.build -f -gui -p all/re.build -gui -p all -svn no/' README.package.creation", shell=True)
      subprocess.call("gksu debian", shell=True)
      subprocess.Popen("xfce4-terminal -e 'bash -c \"./README.package.creation -u %s\";sleep 10'" % (str(u_name)),shell=True)

之后如何做,我必须按照产品2的相同程序

编辑: 在python中os.environ怎么样? 我试图用os.putenv进行更改,然后os.environ似乎无法正常工作。

2 个答案:

答案 0 :(得分:2)

尝试:

  import OS
  os.environ['product']='product1'
  subprocess.call("make clean", shell=True)

等等

答案 1 :(得分:0)

您的问题非常简单,解决方案也是如此:。

subprocess.Popen(...)中,更改来自:

的来电
subprocess.Popen("xfce4-terminal -e 'bash -c \"./README.package.creation -u %s\";sleep 10'" % (str(u_name)),shell=True)

为:

subprocess.Popen("xfce4-terminal -e 'bash -c \"source ~/.bashrc; ./README.package.creation -u %s\";sleep 10'" % (str(u_name)),shell=True)

基本上,在调用包创建命令之前,您要求bash获取.bashrc文件。

另一个例子:

sgulati@precise:~$ cat /tmp/1.sh
export A=100
sgulati@precise:~$ python -c "import subprocess
print subprocess.Popen(['bash', '-c', 'source /tmp/1.sh; echo \$A'], stdout=subprocess.PIPE).stdout.read()"
100

在此示例中,我在A=100/tmp/1.sh中声明了变量source,然后执行echo $A。由于source /tmp/1.shA的值在执行echo $A时已知。

请注意我在我的示例中使用的语法是来自python 2.7.3的语法,但无论你怎么做,这个概念都非常相似。