使用python在命令提示符中更改当前工作目录

时间:2012-03-31 20:21:15

标签: python windows cmd environment

我正在尝试编写一个将我的cwd更改为所需目录的python脚本。我无法直接从python执行此任务,因此我编写了一个简单的batch脚本来执行此操作。

Changedir.bat

@echo off
chdir /D F:\cygwin\home\

如果我直接在我的cmd中执行上述脚本,它运行正常,但如果我尝试用python脚本执行它,则没有任何反应。我的cwd保持不变。

PythonScript.py

import shlex,subprocess

change_dir = r'cmd.exe /c C:\\Users\\test.bat'
command_change = shlex.split(change_dir)
subprocess.call(command_change)

3 个答案:

答案 0 :(得分:5)

当然这不起作用,因为subprocess.call会为你的脚本产生全新的进程。这将在完全独立的环境中执行脚本。

答案 1 :(得分:3)

如果要在命令提示符中更改目录,则必须使用cd.bat脚本。

您无法获得另一个进程(即Python),因为在另一个进程中对当前目录所做的更改不会反映回父进程。 .bat脚本工作的原因是它由调用它而不是子进程的命令shell处理。

答案 2 :(得分:1)

你可以试试这个。它适用于 Linux 以更改当前 shell 的 CWD。太可怕了。

def quote_against_shell_expansion(s):
    import pipes
    return pipes.quote(s)

def put_text_back_into_terminal_input_buffer(text):
    # use of this means that it only works in an interactive session
    # (and if the user types while it runs they could insert
    #  characters between the characters in 'text')
    import fcntl, termios
    for c in text:
        fcntl.ioctl(1, termios.TIOCSTI, c)

def change_shell_working_directory(dest):
    put_text_back_into_terminal_input_buffer("cd "+quote_against_shell_expansion(dest)+"\n")