我试图编写一个用于构建某些软件的python包装器。我需要使用不同的配置自动创建数百次,这意味着我不能只是autogen.sh ; ./configure ; make ; make install
。我使用的一些配置需要运行有条件地设置一些环境变量的脚本。我要的是能够做这样的事情:运行多个shell命令并等待结果的Python脚本
command = './autogen.sh'
ret = subprocess.call(command.split())
if ret != 0:
sys.exit(ret)
command = './script.sh ; ./configure <configure-flags>'
ret = subprocess.call(command.split())
if ret != 0:
sys.exit(ret)
command = 'make'
ret = subprocess.call(command.split())
if ret != 0:
sys.exit(ret)
command = 'make install'
ret = subprocess.call(command.split())
if ret != 0):
sys.exit(ret)
我遇到的问题是,在script.sh
设置环境变量没有得到保存configure
。我在Sending multiple commands to a bash shell which must share an environment中看到了部分解决方案,但涉及将命令刷新到stdin
并轮询一个结果,当您有一个非常长的makefile时(我的大约需要10-20分钟),它不会真正起作用,它也不会给出你是我需要知道的构建是否成功的返回值。
有没有人知道更好的方法来做到这一点?
我实际上不是所有的挑剔环境从一个'调用(被保存)'到另一个。我只需在每个'call()'中调用安装脚本即可。 –
“如果子进程打印'rm -rf /'”如果子进程直接执行'rm -rf /'怎么办? –
@thatotherguy:的确如此。 :-)然而,我正考虑使用较窄的通信渠道来运行更多的大型系统,这些系统可以隔离(不同的UID,甚至可以在不同的虚拟机上运行)等子项。 – torek