我正在尝试编写一个将我的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)
答案 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")