代码之家  ›  专栏  ›  技术社区  ›  Oliver

通过Python脚本更改提示工作目录

  •  4
  • Oliver  · 技术社区  · 17 年前

    是否可以通过Python脚本更改Windows命令提示符工作目录?

    例如

    >> cd
    >> c:\windows\system32
    >> make_decision_change_dir.py
    >> cd
    >> c:\windows
    

    我尝试了一些不起作用的方法:

    import os
    os.chdir(path)
    

    import os, subprocess
    subprocess.Popen("chdir /D \"%s\"" %path, shell=True)
    

    import os, subprocess
    subprocess.Popen("cd \"%s\"" %path, shell=True)
    

    import os, subprocess
    subprocess.Popen("CD=\"%s\"" %path, shell=True)
    

    据我所知,并观察到这些操作改变了当前进程的工作目录——这是Python进程,而不是执行它的提示符。

    谢谢

    使现代化

    我想要更改的路径是动态的(基于我正在处理的项目,构建位置的完整路径会更改),因此我想用Python编写解决方案,而不是使用Windows批处理文件。

    使现代化

    最后我一起破解了一个批处理文件来完成这个任务;( 谢谢大家。

    5 回复  |  直到 17 年前
        1
  •  3
  •   David Webb    17 年前

    我不清楚你想在这里做什么。是否需要可以从Windows命令提示符运行的python脚本,该脚本将更改Windows命令会话的工作目录?

    如果是这样,我99.9%肯定这是不可能的。正如你自己所说的 python.exe cmd.exe

    通过Windows API,您可能可以通过向Windows发送击键之类的方式来执行某些操作,但这将非常脆弱。

    我能想到的唯一两个实用选项是将Python脚本包装到批处理文件中:

    1. 从Python脚本中输出所需的目录,读取批处理文件中的输出,并将CD刻录到其中。
    2. 从批处理文件启动Python脚本,允许Python脚本启动新的批处理文件 命令提示符
        2
  •  2
  •   Ned Batchelder    17 年前

    xdir.py

    简单地说,我有一个xdir.py文件,它将Windows命令写入标准输出:

    # Obviously, this should be more interesting..
    import sys
    print "cd", sys.argv[1]
    

    @echo off
    python xdir.py %* >%TEMP%\__xdir.cmd
    call %TEMP%\__xdir.cmd
    

    然后我创建一个doskey别名:

    doskey x=xdir.cmd $*
    

    最终的结果是我可以打字

    $ x subdir
    

    并将其转换为subdir。

        3
  •  1
  •   S.Lott    17 年前

    一种常见的解决方案是由两部分组成的脚本。

    第1部分是Python,它创建了一个临时的.BAT文件,其中包含相应的CD命令。

    第2部分是临时的.BAT文件。

    蝙蝠

    python figurethepath.py >temp.bat
    temp.bat
    
        4
  •  1
  •   Community Mohan Dere    9 年前

    例如,在 bash ,您可以使用一个别名来计算路径并更改当前工作目录,类似于 @S.Lott

    alias my_cd='TMP=`compute_path.py`; cd $TMP;'
    

    请注意 cd 命令仍在父进程(终端)中解释,该进程能够更改自己的当前工作目录。

        5
  •  0
  •   gimel    17 年前

    这个 subprocess.Popen() doc page

    孩子们 当前目录在执行之前将更改为cwd。请注意,搜索可执行文件时不考虑此目录,因此无法指定相对于cwd的程序路径。

        6
  •  0
  •   Picachieu    7 年前
    imoprt os
    os.system("start cmd.exe /k \"cd /d c:\\windows\\system32 & python make_decision_change_dir.py\"")