Python os.system执行多条语句

今天遇到要在os.system中连续执行多条语句的情况,语句如下:

cmd1="cd /d %s" % os.path.dirname(file_path)

cmd2="python setup.py install" 

如果分为两次执行,即:os.system(cmd1) os.system(cmd2),在执行第二条语句的时候会提示找不到setup.py文件,也就是没有进入到相应的路径,查阅了类似的帖子,有说明如下:

###########################################################################

你需要了解os.system工作原理

Execute the command (a string) in a subshell. This is implemented by calling the Standard C function system(), and has the same limitations...

关于子进程的创建需要明确两点:

  1. 父进程的环境变量(environment variables)会默认传递到子进程中(工作目录PWD就是环境变量之一)
  2. 使用system函数,子进程无法影响父进程中的环境变量

根据这两点,执行os.system(path)引发的工作目录变更作用范围仅限于第一个被创建的子进程,故而当前的工作目录没有变更,到执行os.system(upd)就会报错。关于这点,可以用REPL验证如下:

>>> import os
>>> os.getcwd()
'/Users/user1'
>>> os.system('cd /etc')
0
>>> os.getcwd()
'/Users/user1'

要达到预期的效果,如果仍使用os.system,有两种方法。第一种方法是确保工作目录的变更和svn都在子进程中进行,可以使用复合语句(如os.system('cd path-to-repo && svn ci'))或多个语句(如os.system('cd path-to-repo; svn ci'))。第二种方法则是先在父进程中切换工作目录(os.chdir('path-to-repo')),再利用1.中提到的原理,执行子进程即可(os.system('svn ci'))。

###########################################################################

最后采用cmd="cd /d %s && python setup.py install" % os.path.dirname(file_path)的形式解决了问题,即采用&&连接多个命令

  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值