【问题标题】:package creation file doesnot take value from .bashrc file包创建文件不从 .bashrc 文件中获取价值
【发布时间】:2013-06-18 12:01:22
【问题描述】:

我是 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 将发送空值。 请帮助解决我的问题。 我的代码是:

      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 似乎无法正常工作。

【问题讨论】:

  • 你的~/.bashrc 应该很有趣。
  • @devnull:不是我的,我的公司:)
  • 我觉得你不需要打开一个新的终端,你可以source ~/.bashrc。但我不明白你的问题:你想创建一个 debian 包但你想使用 ~/.bashrc?这是非常愚蠢的解决方案 - 想一想:如果任何其他人想从您的程序创建一个包 - 他/她的包会有所不同,因为(s)他不使用 bash 并且使用例如zsh?
  • @uzsolt 如果我使用 source ~/.bashrc 它不会对 .bashrc 产生任何影响,因为它适用于我的公司,所以这里都只使用 bash
  • @nammu 所以,只是为了澄清:你想构建 debian 包吗?如果是,我认为 debian-package 应该独立于 bashrc。如果要生成两个版本,可以创建两个文件,也可以使用条件。还是我误会了你?

标签: python bash wxpython debian subprocess


【解决方案1】:

试试:

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

等等

【讨论】:

    【解决方案2】:

    你的问题很简单,解决方法也很简单:

    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
    

    在这个例子中,我在/tmp/1.sh中声明了变量A=100source它然后执行echo $A。因为source /tmp/1.sh,所以A的值在echo $A执行时是已知的。

    请注意,我在示例中使用的语法是来自 python 2.7.3 的语法,但无论您如何处理,概念都几乎相同。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-16
      • 1970-01-01
      • 2016-07-26
      相关资源
      最近更新 更多