Python 包创建文件不从.bashrc文件获取值
我是python的新手,对于GUI,我使用wxpython 我的问题是: 我必须为两种类型的产品(比如产品1和产品2)创建一个debian文件。这可以通过运行README.package.creation文件来完成。对于“.bashrc”中的“product1”,我们必须进行更改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”),然后我们必须
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)