python 与 buildins

Jim_King_2000 2010-07-30 02:32:50
如何用python运行bash buildin命令,如pushd,popd?
...全文
169 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
iambic 2010-07-30
  • 打赏
  • 举报
回复
一般创建子进程都可以指定子进程的工作目录。subprocess有一个cwd参数可以做这个事情。最好不要用bash来控制工作目录了,那不像正经途径。
Jim_King_2000 2010-07-30
  • 打赏
  • 举报
回复
pushd path进入path子目录。popd还原子目录。假设当前目录为.
pushd abc #当前目录变成./abc
popd #当前目录变成.

我这里有多级子目录,呈树状,每个子目录里面有个命令。我现在需要进入子目录,调用哪个命令,然后退出子目录。代码如下:

class PathTraveller:
def __init__(self, path):
subprocess.call(["bash -c 'pushd abc'"], shell = True);

def __del__(self):
subprocess.call(["bash -c 'popd'"], shell = True);

def execute(self, cmd):
subprocess.call([cmd]);

def main():
x = PathTraveller("abc");
x.execute("pwd");


可惜的就是subprocess.call()不听使唤。
iambic 2010-07-30
  • 打赏
  • 举报
回复
不清楚bash里pushd是干什么的,我之前那个只是告诉你如果想调用bash命令的话如何做。
如果想改变当前的工作目录,使用python的os.chdir就可以了,为什么要调用bash的,毕竟你现在用的是python,不是bash。
Jim_King_2000 2010-07-30
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 iambic 的回复:]

调用运行外部bash命令:bash -c 'pushd...'
[/Quote]
这样改变的是新进程的路径,不是当前进程的。如何改变当前进程的路径?
amu9900 2010-07-30
  • 打赏
  • 举报
回复

import os
st = os.system("命令")
#st返回0【成功】或1【失败】


f_s = os.popen("命令")
#f_s为命令返回结果的文件对象【查看用f_s.read()或者readline、readlines...等文件对象操作方法】


iambic 2010-07-30
  • 打赏
  • 举报
回复
调用运行外部bash命令:bash -c 'pushd...'
Jim_King_2000 2010-07-30
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 liuzn609 的回复:]

楼主去这看看吧http://hi.baidu.com/yanyulou/blog/item/cb2589d484967902a18bb781.html
[/Quote]
看过了。os 与 subprocess 都只能运行外部命令。buildin无法运行。楼上可以试试看。
liuzn609 2010-07-30
  • 打赏
  • 举报
回复
楼主去这看看吧http://hi.baidu.com/yanyulou/blog/item/cb2589d484967902a18bb781.html

37,743

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • WuKongSecurity@BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧