Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 包创建文件不从.bashrc文件获取值_Python_Bash_Wxpython_Debian_Subprocess - Fatal编程技术网

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

Python 包创建文件不从.bashrc文件获取值,python,bash,wxpython,debian,subprocess,Python,Bash,Wxpython,Debian,Subprocess,我是python的新手,对于GUI,我使用wxpython 我的问题是: 我必须为两种类型的产品(比如产品1和产品2)创建一个debian文件。这可以通过运行README.package.creation文件来完成。对于“.bashrc”中的“product1”,我们必须进行更改 Product = product1 之后,我们必须在新终端中进行“清理”(否则.bashrc中的更改将不会生效,即如果我们不遵循此过程,“产品”可能不等于“产品1”),然后我们必须

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

我的问题是:

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

                Product = product1 
之后,我们必须在新终端中进行“清理”(否则.bashrc中的更改将不会生效,即如果我们不遵循此过程,“产品”可能不等于“产品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.ENVION似乎无法正常工作。

您的问题非常简单,解决方案也很简单:

子流程.Popen(…)
中,将调用更改为:

subprocess.Popen("xfce4-terminal -e 'bash -c \"./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=100
source
它,然后执行
echo$A
。由于
source/tmp/1.sh
,当执行
echo$A
时,
A
的值是已知的

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

尝试:

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

依此类推,你的
~/.bashrc
应该很有趣。@devnull:不是我的,我的公司:)我想你不需要打开新的终端,你可以
source~/.bashrc
。但我不理解你的问题:你想创建一个debian包,但你想使用~/.bashrc?这是一个非常愚蠢的解决方案——想想看:如果其他人想从你的程序中创建一个包,他/她的包会有所不同,因为他不使用bash,如果我使用source~/.bashrc,他/她的包会使用例如zsh?@uzsolt,这对.bashrc没有任何影响,因为这对我的公司来说,所以这里所有人都使用bashonly@nammu所以仅供澄清:是否要构建debian包?如果是,我认为debian包应该独立于bashrc。如果要生成两个版本,可以创建两个文件,也可以使用条件。还是我误解了你?
  import OS
  os.environ['product']='product1'
  subprocess.call("make clean", shell=True)